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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值