产生18位的随机数作为bigint


IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_Generate_Rand_Bigint]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[proc_Generate_Rand_Bigint]
GO
-- =============================================
-- Author: 傲三
-- Create date: 2021-08-12
-- Description: 产生18位的随机数作为bigint
-- =============================================
CREATE PROCEDURE [dbo].[proc_Generate_Rand_Bigint]
@frontIsYYYYMMDDHHMMSS BIT, --前面14位是否是时间
@resultBigint BIGINT OUT
AS
BEGIN
DECLARE @resultStr VARCHAR(18),@dateStr VARCHAR(50),@randStr1 VARCHAR(9),@randStr2 VARCHAR(9);
SELECT @randStr1 = RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 9),
@randStr2 = RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 9),
@dateStr = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120),'-',''),':',''),' ','')
IF(@frontIsYYYYMMDDHHMMSS=1)
BEGIN
set @resultStr=@dateStr+RIGHT(@randStr1,4)
END
ELSE
BEGIN
SET @resultStr=@randStr1+@randStr2
IF(LEFT(@resultStr,1)='0')
BEGIN
SET @resultStr='1'+RIGHT(@resultStr,17)
END
END
SET @resultBigint = CONVERT(BIGINT, @resultStr);
END
GO

--0==> 628336056134315476
--1==> 201310171402033239

 

DECLARE @r BIGINT;
EXEC [proc_Generate_Rand_Bigint] 0,@r OUT
SELECT @r

posted @ 2021-08-12 14:32  傲三  阅读(447)  评论(0编辑  收藏  举报