블로그 이미지
따시쿵

calendar

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

Notice

2014. 7. 22. 11:42 MSSQL

1. 랜덤 쿠폰 번호 발행하기

NEWID() 함수를 이용한 방법을 소개하도록 하겠다.

먼저 NEWID() 함수의 속성부터 알아보도록 하자.

1. NEWID() 는 uniqueidentifier 데이타 형식을 가진다.
2. GUID(전역 고유 식별자) 역할을 하는 16바이트 이진 값을 저장한다.
3. GUID는 고유한 이진 숫자 값이다.
4. 전 세계 모든 컴퓨터는 고유한 GUID 값을 생성한다.
5. GUID의 주된 용도는 여러 사이트에 많은 컴퓨터가 있는 네트워크에서 고유한 식별자를 지정하는 것이다.

실제 SQL 문에서 실행되는 예제를 보도록 하자.

DECLARE @NEWID_TEMP VARCHAR(255)
SET @NEWID_TEMP = NEWID()

SELECT @NEWID_TEMP 
SELECT CONVERT(VARBINARY(255), @NEWID_TEMP)

/*****************************************************************************************
문자열 형식 : ABD26C1E-3781-405E-9D77-4B947DD7CBD0
이진 형식 : 0x41424432364331452D333738312D343035452D394437372D344239343744443743424430
*******************************************************************************************/ 


NEWID 를 이용한 전체 소스 코드임...

SET NOCOUNT ON

DECLARE @MAX_COUNT INT
DECLARE @INDEX INT
DECLARE @COUPON_NUM VARCHAR(10)
DECLARE @COUPON_TYPE VARCHAR(10)
DECLARE @COUPON_PREFIX VARCHAR(10)

SET @MAX_COUNT = 1000
SET @INDEX = 1
SET @COUPON_PREFIX = 'L'
SET @COUPON_TYPE = 'C_TYPE'

WHILE @INDEX <= @MAX_COUNT
BEGIN

	SET @COUPON_NUM = LEFT(REPLACE(NEWID(),'-',''), 10)
						
	INSERT INTO dbo.Dior_Coupon_201104 (COUPON_TYPE, COUPON_NUM)
	VALUES (@COUPON_TYPE, @COUPON_NUM)
	
	SET @INDEX = @INDEX + 1
END


2. 순차적 쿠폰번호 발행하기 

쿠폰 번호를 발행하는데 순자적으로, 즉 ETP0001, ETP0002 ,ETP0003 식으로 발행하는 것을 해 보자.

키 포인트는 숫자를 문자열로 변환하면서 자릿수를 맞추어줘야 한다. 이때 사용하는 함수가 REPLCATE 함수를 이용하면 된다.
전제 소스는 아래와 같다.

SET NOCOUNT ON

DECLARE @MAX_COUNT INT
DECLARE @INDEX INT
DECLARE @COUPON_NUM VARCHAR(10)
DECLARE @COUPON_TYPE VARCHAR(10)
DECLARE @COUPON_PREFIX VARCHAR(10)

SET @MAX_COUNT = 1000
SET @INDEX = 1
SET @COUPON_PREFIX = 'L'
SET @COUPON_TYPE = 'C_TYPE'

WHILE @INDEX <= @MAX_COUNT
BEGIN

	SET @COUPON_NUM = @COUPON_PREFIX + 
                          REPLICATE('0', 4 - DATALENGTH(CONVERT(VARCHAR(4),@INDEX))) + 
                          CONVERT(VARCHAR(4),@INDEX)
						
	INSERT INTO dbo.Dior_Coupon_201104 (COUPON_TYPE, COUPON_NUM)
	VALUES (@COUPON_TYPE, @COUPON_NUM)
	
	SET @INDEX = @INDEX + 1
END


 

posted by 따시쿵