반응형
해당 글에서는 SQL Function을 구성하여 랜덤 한 문자열 배열 내에 값 반환 방법에 대해 알아봅니다.
1) 랜덤 문자열 만들기 : SQL Function 내의 값 지정 방식
💡 랜덤 문자열 만들기 : SQL Function 내의 값 지정 방식
- 랜덤으로 추출할 문자열에서 구분자(,)를 두어서 문자열을 생성하여 그 중에 문자열을 반환받는 함수를 구성해 봅니다.
- 해당 방식은 배열 형태를 가지는 문자열을 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`() RETURNS VARCHAR(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
💡 결과화면
2) 랜덤 문자열 만들기 : SQL Function 파라미터로 배열을 받는 형태
💡 랜덤 문자열 만들기 : SQL Function 파라미터로 배열을 받는 형태
- 랜덤으로 추출할 문자열에서 구분자(,)를 두어서 문자열을 생성하여 그중에 문자열을 반환받는 함수를 구성해 봅니다.
- 해당 방식은 배열 형태를 가지는 문자열을 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)) RETURNS VARCHAR(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
💡 결과 화면
오늘도 감사합니다. 😀
반응형
'DB > Short SQL문' 카테고리의 다른 글
[MySQL/Short] 날짜(일자/시간) 컬럼 범위 조회하기 : YEAR, MONTH, DAY, DATE, HOUR, MINUTE, SECOND, TIME (0) | 2024.05.26 |
---|---|
[DB/Short] MySQL SQL Function : 랜덤 숫자 만들기 (0) | 2024.04.08 |
[DB/Short] MySQL SQL Function : 랜덤 문자, 랜덤 이름 만들기 (0) | 2024.04.08 |
[DB/Short] MySQL : 집계함수로 얻은 값을 조건절에서 사용하는 경우 -서브쿼리, HAVING (1) | 2023.10.05 |
[DB/Short] MySQL: DATETIME ↔ DATE 타입 간의 변환 방법 (0) | 2023.10.05 |