MSSQL Server自动生成日期加数字的序列号 |
需要:需要生成下面的序列号,前半
部分是yyyymmdd
格局的年月日
工夫数字,后半
部分则是天天都从1顺序增进的数字,位数要固定,之间缺乏的补0 。 GO DROP DATABASE [my_test_database] GO GO GO GO CREATE PROCEDURE get_new_id @NEW_ID VARCHAR(16) OUTPUT AS BEGIN DECLARE @DATE DATETIME DECLARE @YYYY VARCHAR(4) DECLARE @MM VARCHAR(2) DECLARE @DD VARCHAR(2) SET @DATE = GETDATE() SET @YYYY = DATEPART(yyyy, @DATE) SET @MM = DATEPART(mm, @DATE) SET @DD = DATEPART(dd, @DATE) SET @YYYY = REPLICATE('0', 4 - LEN(@YYYY)) + @YYYY SET @MM = REPLICATE('0', 2 - LEN(@MM)) + @MM SET @DD = REPLICATE('0', 2 - LEN(@DD)) + @DD SET @NEW_ID = NULL SELECT TOP 1 @NEW_ID = [my_id] FROM [my_table] WHERE [my_id] LIKE @YYYY+@MM+@DD+'%' ORDER BY [my_id] DESC IF @NEW_ID IS NULL -- 注明还没有目前日期的编号,则直接从1开始编号 SET @NEW_ID = (@YYYY+@MM+@DD+'00000001') --假如 存入来了 ELSE BEGIN DECLARE @NUM VARCHAR(8) -- 存入最大的编号外加1 SET @NUM = CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@NEW_ID, 8)) + 1)) --由于 通过类型转换, 迷失了高位的0,需要补上 SET @NUM = REPLICATE('0', 8 - LEN(@NUM)) + @NUM --最终返回日期加编号 SET @NEW_ID = @YYYY+@MM+@DD + @NUM END END GO DECLARE @N INT SET @N = 0 WHILE @N < 20 BEGIN DECLARE @NEW_ID VARCHAR(16) EXECUTE get_new_id @NEW_ID OUTPUT INSERT INTO [my_table] ([my_id]) VALUES (@NEW_ID) SET @N = @N + 1 END SELECT * FROM [my_table] GO /**//* my_id ---------------- 2006092700000001 2006092700000002 2006092700000003 2006092700000004 2006092700000005 2006092700000006 2006092700000007 2006092700000008 2006092700000009 2006092700000010 2006092700000011 2006092700000012 2006092700000013 2006092700000014 2006092700000015 2006092700000016 2006092700000017 2006092700000018 2006092700000019 2006092700000020 */ 诠释:原来yyyymmdd 格局的日期直接这样取即可: --输出 后果: /**//* -------- 20060927 */ |