Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨

23.06.27 / SUBSTRING_INDEX, UNSIGNED, CAST, CONCAT, LPAD 본문

Database/MYSQL

23.06.27 / SUBSTRING_INDEX, UNSIGNED, CAST, CONCAT, LPAD

낫쏘링 2023. 6. 27. 11:46
728x90
SELECT
	CASE
	WHEN COUNT(*) = 0 THEN 'g001' -- 만약 
	WHEN CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED) < 999
	THEN CONCAT('g',LPAD(MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1,3,'0'))
	ELSE 
		CONCAT('g',MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1)
	END AS newGoodsCode
	-- 첫번째 인수 : '문자열' 또는 컬럼 
	-- 두번째 인스 : '구분자'
	-- 세번째 인수 : 양수 : 구분자의 왼쪽 / 음수 : 구분자의 오른쪽(출력 순서는 그대로)
	--						글자 하나하나의 개수가 아닌 구분자를 기준으로 나눈 개수
	--						goodsgoldcodegname에서 구분자가 g일 경우 세 번째 인수가 2라면 goods 출력 / 3이라면 goodsgoldcode출력
	-- CAST(AS UNSIGNED) 정수로만 출력 (01 -> 1 / -1 -> 1) - CAST : 데이터 타입 형변환 / UNSIGNED : 정수 => 정수로 데이터 타입 형변환
	-- MAX() : 최댓값
	-- +1 : 앞에 있는 숫자에 +1한 숫자(숫자로 형변환 해줬기 때문에 연산 가능)
	-- LPAD : 두번째 인수 : 자릿수 / 세번째 인수 : 자릿수가 빌 경우 앞 자리를 뭘로 채워줄지
	-- CONCAT : 모든 '문자열' 혹은 컬럼을 더해줌(연산X) / CONCAT(g.g_code :: 'g') => g.g_code가 g001, g002일 경우 - g001::g , g002::g
FROM
	tb_goods AS g;
728x90