재우니의 블로그

MS SQL 의 숫자 4자리 + 대문자 2자리 + 숫자 3자리 = 총 9자리 난수 만들기

 

view

CREATE VIEW [dbo].[View_RandomNumber]
AS
    SELECT RAND() AS RANDOMNUMBER
GO

 

function

CREATE FUNCTION [dbo].[ufn_RandBetween](@BOTTOM INT, @TOP INT)
RETURNS INT
AS
	BEGIN
		RETURN (SELECT CAST(ROUND((@TOP-@BOTTOM)* RANDOMNUMBER + @BOTTOM,0) AS INTEGER) 
        FROM View_RandomNumber)
	END
GO

 

총 9자리로 구성되어 있으며, 실행하면 "6263QB802" 이며,  앞에 숫자 4자리 + 대문자 2자리 + 숫자 3자리 = 총 9자리

 

CREATE FUNCTION [dbo].[ufn_GenerateRandom]() 
	returns VARCHAR(10) 
AS 
  BEGIN 
		DECLARE @randInt INT; 
		DECLARE @NewCharacter VARCHAR(1); 
		DECLARE @NewPassword VARCHAR(10); 

		SET @NewPassword=''; 

		--## start of 숫자 4자리
		WHILE ( Len(@NewPassword) < 4 ) 
		BEGIN 
			SELECT @randInt = dbo.ufn_RandBetween(48, 122) 

			-- 0-9 < = > ? @ A-Z [ \ ] a-z 
			IF @randInt <= 57 
			BEGIN 
				SELECT @NewCharacter = Char(@randInt) 

				SELECT @NewPassword = Concat(@NewPassword, @NewCharacter) 
			END 
		END 
		--## end of 숫자 4자리

		--Ensure a lowercase 
		--SELECT @NewCharacter = Char(dbo.Randbetween(97, 122)) 

		--SELECT @NewPassword = Concat(@NewPassword, @NewCharacter) 

		--Ensure an upper case 
		--## start of 대문자 2자리

		SELECT @NewCharacter = Char(dbo.ufn_RandBetween(65, 90)) 

		SELECT @NewPassword = Concat(@NewPassword, @NewCharacter) 

		SELECT @NewCharacter = Char(dbo.ufn_RandBetween(65, 90)) 

		SELECT @NewPassword = Concat(@NewPassword, @NewCharacter) 

		--## end of 대문자 2자리


		-- ## start of 총길이 9자리이며 나머지 자리는 숫자로 채운다.
		WHILE ( Len(@NewPassword) < 9 ) 
		BEGIN 
			SELECT @randInt = dbo.ufn_RandBetween(48, 122) 

			-- 0-9 < = > ? @ A-Z [ \ ] a-z 
			IF @randInt <= 57 
			BEGIN 
				SELECT @NewCharacter = Char(@randInt) 

				SELECT @NewPassword = Concat(@NewPassword, @NewCharacter) 
			END 
		END 

		-- ## end of 총길이 9자리이며 나머지 자리는 숫자로 채운다.

      --Ensure a number 
      --SELECT @NewCharacter = Char(dbo.ufn_RandBetween(48, 57)) 

      --SELECT @NewPassword = Concat(@NewPassword, @NewCharacter) 

      ----Ensure a symbol 
      --WHILE ( Len(@NewPassword) < 10 ) 
      --  BEGIN 
      --      SELECT @randInt = dbo.ufn_RandBetween(33, 64) 

      --      -- ! # $ % & < = > ? @ 
      --      IF @randInt = 33 
      --          OR ( @randInt >= 35 
      --               AND @randInt <= 38 ) 
      --          OR ( @randInt >= 60 
      --               AND @randInt <= 64 ) 
      --        BEGIN 
      --            SELECT @NewCharacter = Char(@randInt) 

      --            SELECT @NewPassword = Concat(@NewPassword, @NewCharacter) 
      --        END 
      --  END 

      RETURN( @NewPassword ); 
  END; 

GO

 

실행해 보기

SET @PrizeNumber = 'K' + (SELECT dbo.ufn_GenerateRandom())

 

참고사이트

 

http://www.sqler.com/index.php?mid=bColumn&page=6&document_srl=900494

 

SQL 사용자 Tip과 강좌 - 랜덤 캐릭터 생성하기

SQLER의 사용자들이 만들어가는 SQL서버 사용자 Tip & 강좌 게시판입니다. SQL서버 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다. 랜덤 캐릭터 생성하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 무작위로 패스워드를 생성해야 하거나 쿠폰번호 등을 생성해야 할 때 일정한 범위내에서 랜덤한 문자열을 생성하는 코드를 만들어 본다. 랜덤한 문자

www.sqler.com