SQL Tips

 

[SQL Server] クーポンコード(シリアルコード)発行する方法

クーポンコードを登録するテーブルを作成します。

CREATE TABLE dbo.CouponCode (
CouponCode varchar(30) PRIMARY KEY NOT NULL
)

下記のSQLは16文字のクーポンを10個発行する場合のSQLです。

DECLARE @CouponNum int, @CouponCode varchar(16)

-- #### 発行するクーポン数
SET @CouponNum = 10

WHILE (@CouponNum > 0)
BEGIN
-- #### MD5よりNEWID()を利用するのが処理速度が速い
-- #### 数字の「0」は英文字「O」と似ているので出ないように「A」など他の文字に変更
-- #### 数字の「1」は英文字の大文字「I」,[L]の小文字「l」と似ているので出ないように「B」など他の文字に変更
SET @CouponCode = LEFT(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(NEWID(),'0','A'),'1','B'),'O','C'),'I','D'),'-',''), 16)

-- #### 発行したクーポン番号が存在しないクーポン番号の場合のみ登録を行う。
-- #### 存在するクーポン番号の場合、再度発行作業を行う。
IF NOT EXISTS (SELECT TOP 1 1 FROM dbo.CouponCode WITH (NOLOCK) WHERE CouponCode = @CouponCode)
BEGIN
INSERT INTO dbo.CouponCode(CouponCode) 
VALUES (@CouponCode)
SET @CouponNum = @CouponNum - 1
END
END

クーポン発行数を変更したい場合は、上記のSQLで下記の部分を数字を変更します。

-- #### 発行するクーポン数
SET @CouponNum = 10

クーポンコードの文字数が16文字にしていますが、最大32文字まで長さを調整することができます。
長さの調整は上記のSQLで下記の部分の数字を変更します。

SET @CouponCode = LEFT(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(NEWID(),'0','A'),'1','B'),'O','C'),'I','D'),'-',''), 16)


クーポンを4文字ずつ分けて間に「-」を入れたい場合は下記のようにSELECTとします。

SELECT TOP 10 CouponCode, SUBSTRING(CouponCode,1,4)+'-'+SUBSTRING(CouponCode,5,4)+'-'+SUBSTRING(CouponCode,9,4)+'-'+SUBSTRING(CouponCode,13,4)
FROM dbo.CouponCode WITH (NOLOCK)

実行結果
このエントリーをはてなブックマークに追加
2016-08-12 12:43:58   592

コメント

[SQL Server] リンクサーバーのリストを取得する方法 - sp_linkedservers

-.日付:2017-01-16   カテゴリ : -   閲覧数:1811

[SQL Server] ガチャ(GACHA)システムを作ろう!

-.日付:2016-08-18   カテゴリ : -   閲覧数:890

[SQL Server] クーポンコード(シリアルコード)発行する方法

-.日付:2016-08-12   カテゴリ : -   閲覧数:592

[SQL Server] 使い捨てメールサービス遮断(Block)してください。

-.日付:2016-03-18   カテゴリ : -   閲覧数:1638

MaxMind GEOIP Function for Microsoft SQL SERVER

-.日付:2016-02-16   カテゴリ : -   閲覧数:706

[SQL Server] IPAddressからCクラス(C Class)まで抽出(取得)する方法

-.日付:2016-02-10   カテゴリ : -   閲覧数:633

Copyright © 2015 INNOYA.COM All rights reserved. RSS