MSSQL模拟雪花算法生产bigint

-- =============================================  
-- Author:     cxh  
-- Create date: 20200425  
-- Description:  模拟雪花算法生产bigint  

-- @randStr2  10到99随机数
-- 调用SELECT dbo.GetSnowFlakeBigint(88)  
-- =============================================  

ALTER FUNCTION GetSnowFlakeBigint(@randStr2 VARCHAR(2) = '99')
RETURNS BIGINT
AS 
BEGIN
DECLARE @result BIGINT;
DECLARE @str VARCHAR(30);
DECLARE @str2 VARCHAR(30);
SELECT @str = REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(100), GETDATE(), 121),':', ''), '.', ''), '-', ''), ' ', '');
SELECT @result = CAST(@str+@randStr2 AS BIGINT); 
RETURN @result ;

 /* 在函数内对带副作用的运算符 'rand' 的使用无效。 */
--declare @str2 varchar(30)
--DECLARE @str VARCHAR(30)
--Select @str =REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(varchar(100), GETDATE(), 121),':','') ,'.',''),'-',''),' ','')
--生成10-99之间的随机数
--DECLARE @NumBegin Int=0 --随机数的最小值
--DECLARE @NumEnd Int=0 --随机数的最大值
--DECLARE @Decimal Int=0 --保留小数点几位
--declare @InviteMoney int --随机金额
--set @NumBegin=10
--set @NumEnd=99
--set @InviteMoney=@NumBegin+round((@NumEnd-@NumBegin)*rand(),@Decimal)
--SELECT @str2=@str+CAST(@InviteMoney AS VARCHAR(2))
--RETURN CAST(@str2 AS BIGINT); 

END

 

=====================方法2

declare @aIn_date bigint

set @aIn_date=DATEDIFF ( SECOND , '1970-01-01 08:00:00.000' , getdate() ) -- 秒数
set @aIn_date = @aIn_date*1000 + datepart(ms,getdate()) -- 毫秒数
SELECT @aIn_date

 

-- 生成bigint 2020042501092981785
declare @str varchar(30)
declare @str2 varchar(30)
Select @str =REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(varchar(100), GETDATE(), 121),':','') ,'.',''),'-',''),' ','')
--生成10-99之间的随机数
DECLARE @NumBegin Int=0 --随机数的最小值
DECLARE @NumEnd Int=0 --随机数的最大值
DECLARE @Decimal Int=0 --保留小数点几位
declare @InviteMoney int  --随机金额
set @NumBegin=10
set @NumEnd=99
set @InviteMoney=@NumBegin+round((@NumEnd-@NumBegin)*rand(),@Decimal)
SELECT @str2=@str+CAST(@InviteMoney AS VARCHAR(2))
SELECT @str2

 

你可能感兴趣的:(MSSQL数据库)