-- =============================================
-- 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