SQL Server 流水單號FUNCTION練習
在網路上買東西都有訂單流水編號
說明:
DEFAULT dbo.練習訂單編號()
這個表若單獨執行,一定錯,因為dbo.練習訂單編號()
還沒建,要先執行下面的FUNCTION,上面的表才會成立
主FUNCTION:
很可惜,不能用自動編號IDENTITY
因為有跳號及上限的風險
所以最好自已寫個FUNCTION比較適合
希望的結果是:
10305240001
10305240002
10305240003
....
抓出年月日後,並自動依時間順序賦予單號
每天都可以有9999筆,若不夠再補上位數就好
10305240001
10305240002
10305240003
....
抓出年月日後,並自動依時間順序賦予單號
每天都可以有9999筆,若不夠再補上位數就好
先Create一張練習的訂單表:
USE 練練 GO CREATE TABLE 練習自動訂單號 ( 訂單編號 VARCHAR(11) DEFAULT dbo.練習訂單編號(), 訂單總價 MONEY, 訂單時間 DATETIME DEFAULT GETDATE() ) GO
說明:
DEFAULT dbo.練習訂單編號()
這個表若單獨執行,一定錯,因為dbo.練習訂單編號()
還沒建,要先執行下面的FUNCTION,上面的表才會成立
主FUNCTION:
CREATE FUNCTION dbo.練習訂單編號() RETURNS VARCHAR(11) AS BEGIN DECLARE @firstOrderId VARCHAR(11) DECLARE @lastOrderId VARCHAR(11) --表內目前最後的單號 DECLARE @finalOrderId VARCHAR(11) --最後新增回傳的單號 DECLARE @yy VARCHAR(3) --年(民國) DECLARE @mm VARCHAR(2) --月 DECLARE @dd VARCHAR(2) --日 DECLARE @numS VARCHAR(4) --取出/放入的流水號 DECLARE @num INT ------------------------------------------------------------- SET @yy = CONVERT(VARCHAR,DATEPART(YEAR,GETDATE())-1911) SET @mm = CONVERT(VARCHAR,DATEPART(MONTH,GETDATE())) SET @dd = CONVERT(VARCHAR,DATEPART(DAY,GETDATE())) SET @yy = CONVERT(VARCHAR,DATEPART(YEAR,GETDATE())-1911) SET @mm = CONVERT(VARCHAR,DATEPART(MONTH,GETDATE())) SET @dd = CONVERT(VARCHAR,DATEPART(DAY,GETDATE())) IF LEN(@mm) < 2 SET @mm= '0'+@mm --抓出月的位數,只有個位數自動補0 IF LEN(@dd) < 2 SET @dd= '0'+@dd --抓出日的位數,只有個位數自動補0 SET @firstOrderId = @yy+@mm+@dd --將年月日結合 ------------------------------------------------------------- --找出最後一筆,並將該值賦予給@lastOrderId------------------------ SELECT TOP(1) @lastOrderId=訂單編號 FROM 練習自動訂單號 WHERE 訂單編號 LIKE(@firstOrderId+'%') ORDER BY 訂單編號 DESC ------------------------------------------------------------- --若筆數為0,表示第1筆------------------------------------------ --若有筆數,找出最後1位數+1並賦予回去@finalOrderId --------------- IF(@@ROWCOUNT=0) SET @finalOrderId=@firstOrderId+'0001' ELSE BEGIN SET @numS = SUBSTRING(@lastOrderId,8,4) SET @num = CAST(@numS AS INT) + 1 SET @numS =REPLICATE('0',4-LEN(@num)) + CAST(@num AS VARCHAR) --抓出位數,自動補零為4位數 SET @finalOrderId = @firstOrderId + @numS END ------------------------------------------------------------- RETURN @finalorderId --傳回值 END GO
要何如判斷訂單是否會同時寫入相同的編號,MYSQL也可以用嗎
回覆刪除