- 랜덤으로 추출할 문자열에서 구분자(,)를 두어서 문자열을 생성하여 그 중에 문자열을 반환받는 함수를 구성해 봅니다. - 해당 방식은 배열 형태를 가지는 문자열을 SQL Function 내부에 선언하여 사용하는 방식입니다.
파라미터/변수 명
분류
타입
설명
v_subject_arr
변수
VARCHAR(125)
랜덤으로 수행할 배열을 가지고 있는 변수
v_rand_index
변수
INT
랜덤 인덱스 값을 저장하는 변수
v_ret
변수
VARCHAR(31)
최종 결과값을 반환하는 변수
💡 f_randsubject
1. 결과값, 랜덤으로 수행할 배열을 가지고 있는 변수, 랜덤 인덱스 값을 저장하는 변수를 지정합니다.
2. v_subject_arr 문자열에서 쉼표(,)를 제거한 길이를 원래 길이에서 뺀 값에 랜덤 숫자를 곱한 뒤 1을 더하여 계산됩니다. 이를 통해 랜덤 인덱스 값이 생성되어 v_rand_index 값에 대입합니다.
3. v_subject_arr 문자열에서 v_rand_index에 해당하는 인덱스 위치의 주제를 가져오는 SUBSTRING_INDEX 함수를 사용하여 설정되어 v_ret 값에 대입합니다.
4. 마지막으로 v_ret 값이 반환됩니다.
CREATE DEFINER=`localmaster`@`localhost` FUNCTION `f_randsubject1`() RETURNSVARCHAR(31) CHARSET utf8mb4
BEGIN-- 1. 결과값, 랜덤으로 수행할 배열을 가지고 있는 변수, 랜덤 인덱스 값을 저장하는 변수를 지정합니다.DECLARE v_ret VARCHAR(31);
DECLARE v_subject_arr VARCHAR(125) default'국어,수학,영어,과학,사회,물리,문학,한국지리,윤리';
DECLARE v_rand_index INT;
-- 2. v_subject_arr 문자열에서 쉼표(,)를 제거한 길이를 원래 길이에서 뺀 값에 랜덤 숫자를 곱한 뒤 1을 더하여 계산됩니다. 이를 통해 랜덤 인덱스 값이 생성되어 v_rand_index 값에 대입합니다.SET v_rand_index =FLOOR(RAND() * (LENGTH(v_subject_arr) - LENGTH(REPLACE(v_subject_arr, ',', ''))) +1);
-- 3. v_subject_arr 문자열에서 v_rand_index에 해당하는 인덱스 위치의 주제를 가져오는 SUBSTRING_INDEX 함수를 사용하여 설정되어 v_ret 값에 대입합니다.SET v_ret = SUBSTRING_INDEX(SUBSTRING_INDEX(v_subject_arr, ',', v_rand_index), ',', -1);
-- 4. 마지막으로 v_ret 값이 반환됩니다RETURN v_ret;
END
- 랜덤으로 추출할 문자열에서 구분자(,)를 두어서 문자열을 생성하여 그중에 문자열을 반환받는 함수를 구성해 봅니다. - 해당 방식은 배열 형태를 가지는 문자열을 SQL Function의 파라미터로 받아서 이를 사용하는 방식입니다
변수명
분류
타입
설명
v_subject_arr
파라미터
VARCHAR(125)
랜덤으로 수행할 배열을 가지고 있는 변수
v_rand_index
변수
INT
랜덤 인덱스 값을 저장하는 변수
v_ret
변수
VARCHAR(31)
최종 결과값을 반환하는 변수
💡 f_randsubject2
1. 결과값, 랜덤 인덱스 값을 저장하는 변수를 지정합니다.
2. v_subject_arr 문자열에서 쉼표(,)를 제거한 길이를 원래 길이에서 뺀 값에 랜덤 숫자를 곱한 뒤 1을 더하여 계산됩니다. 이를 통해 랜덤 인덱스 값이 생성되어 v_rand_index 값에 대입합니다.
3. v_subject_arr 문자열에서 v_rand_index에 해당하는 인덱스 위치의 주제를 가져오는 SUBSTRING_INDEX 함수를 사용하여 설정되어 v_ret 값에 대입합니다.
4. 마지막으로 v_ret 값이 반환됩니다
CREATE DEFINER=`localmaster`@`localhost` FUNCTION `f_randsubject2`(v_subject_arr VARCHAR(125)) RETURNSVARCHAR(31) CHARSET utf8mb4
BEGIN-- 1. 결과값, 랜덤 인덱스 값을 저장하는 변수를 지정합니다.DECLARE v_ret VARCHAR(31);
DECLARE v_rand_index INT;
-- 2. v_subject_arr 문자열에서 쉼표(,)를 제거한 길이를 원래 길이에서 뺀 값에 랜덤 숫자를 곱한 뒤 1을 더하여 계산됩니다. 이를 통해 랜덤 인덱스 값이 생성되어 v_rand_index 값에 대입합니다.SET v_rand_index =FLOOR(RAND() * (LENGTH(v_subject_arr) - LENGTH(REPLACE(v_subject_arr, ',', ''))) +1);
-- 3. v_subject_arr 문자열에서 v_rand_index에 해당하는 인덱스 위치의 주제를 가져오는 SUBSTRING_INDEX 함수를 사용하여 설정되어 v_ret 값에 대입합니다.SET v_ret = SUBSTRING_INDEX(SUBSTRING_INDEX(v_subject_arr, ',', v_rand_index), ',', -1);
-- 4. 마지막으로 v_ret 값이 반환됩니다RETURN v_ret;
END