일을 하다 보니 정말 여러가지 상황을 다 겪게 된다.
미션 :
"0000-0000-0000-0000" 형식으로 된 랜덤 코드를 생성하라!
이걸 C# 코드로 만들려다가 어차피 이 코드를 dB에 저장도 해야 해서 SQL로 만듬
가장 일반적인 생각으로 랜덤함수 써서 16자리 만들면 되지! (어딘가에서 검색해서 나옴)
"0000-0000-0000-0000" 형식의 랜덤코드 생성
-- 랜덤 코드 생성 하기 DECLARE @i INT = 0 DECLARE @randomCode VARCHAR(21) = '' DECLARE @randomCodeTmp VARCHAR(1) = '' DECLARE @couponCodeLen INT = 19 -- 랜덤 코드 자리수 -- 상품권 번호 랜덤 생성 WHILE @i < @couponCodeLen BEGIN IF NOT EXISTS(SELECT 1 WHERE @i IN (4, 9, 14)) -- '-' 들어가는 위치 BEGIN IF CONVERT(INT, RAND() * 2) = 0 -- 숫자 or 문자 BEGIN SET @randomCodeTmp = CHAR((CONVERT(INT, RAND() * 1000) % 26 ) + 65) -- 'I', 'O' 은 숫자 1,0과 혼동이 생길 수 있으니 다른 문자로 대체 IF @randomCodeTmp = 'I' OR @randomCodeTmp = 'O' SET @i = @i - 1 ELSE SET @randomCode = @randomCode + @randomCodeTmp END ELSE BEGIN SET @randomCodeTmp = CONVERT(VARCHAR(2),(CONVERT(INT, RAND() * 10))) -- 숫자 0,1은 영문자 'I', 'O'와 헷갈릴수 있으니 교체 IF @randomCodeTmp = '0' OR @randomCodeTmp = '1' SET @i = @i - 1 ELSE SET @randomCode = @randomCode + @randomCodeTmp END END ELSE BEGIN SET @randomCode = @randomCode + '-' END SET @i = @i + 1 END SELECT @randomCode as 'RANDOM_CODE'
아! NEWID() 라는걸 배웠다.
위 코드를 아래 형태로 교체하였다.
"0000-0000-0000-0000" 형식의 랜덤코드 생성 2
-- 랜덤 코드 생성하기 2 declare @randomCodeTmp VARCHAR(32) declare @randomCode VARCHAR(19) -- 랜덤 ID 생성 SET @randomCodeTmp = REPLACE(newid(), '-', '') -- 'I', 'O' 혼동 문자 교체 SET @randomCodeTmp = REPLACE(REPLACE(@randomCodeTmp, 'I', 'H'), 'O', 'N') -- 1, 0 혼동 숫자 교체 SET @randomCodeTmp = REPLACE(REPLACE(@randomCodeTmp, '1', '2'), '0', '9') -- 랜덤 형식 맞춰서 ID 생성 SET @randomCode = SUBSTRING(@randomCodeTmp, 1, 4)+'-'+SUBSTRING(@randomCodeTmp, 5, 4)+'-'+SUBSTRING(@randomCodeTmp, 9, 4)+'-'+SUBSTRING(@randomCodeTmp, 13, 4) SELECT @randomCode as 'RANDOM_CODE'
이것보다 더 좋은 코드가 나올 수도 있음...ㅋㅋ
'개발 > MSSQL' 카테고리의 다른 글
이름 그룹핑 하기 (0) | 2012.03.15 |
---|---|
MSSQL 2008 설치 (0) | 2012.01.09 |