sqlserver生成雪花ID

本文介绍了两个SQL Server中的自定义函数:fn_NewID及Fn_NewIdtoBint。这两个函数用于将UUID(唯一标识符)转换为bigint类型的数据。fn_NewID函数通过组合系统当前时间和一个随机数来生成bigint类型的唯一值;而Fn_NewIdtoBint函数则直接将UUID转换为bigint。文章详细展示了这两个函数的实现代码。

SELECT  dbo.fn_NewID(NEWID())   -- 20201026155869949
SELECT  dbo.Fn_NewIdtoBint(NEWID()) -- 7499730272645094476

CREATE function [dbo].[Fn_NewIdtoBint]
(
@Newid nvarchar(50)
)
returns bigint
as
 begin
    declare @zaza bigint
    declare @uu uniqueidentifier
    set @uu = @Newid
    set @zaza = ( select convert(bigint, convert (varbinary(8), @uu, 1)) )

    return @zaza
 end


GO


SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO

CREATE function [dbo].[fn_NewID]
(
 @Newid nvarchar(50)
)
returns bigint
as
begin
    declare @resultBigint bigint
    DECLARE @resultStr VARCHAR(19),@dateStr VARCHAR(50),@randStr1 VARCHAR(9);
    SELECT    @randStr1 = RIGHT(100000000000 + CONVERT(bigint, ABS(CHECKSUM(@Newid))), 10),
            --@dateStr = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20),SYSDATETIME(),120),'-',''),':',''),' ','')
            @dateStr =left(replace(replace(replace(replace(CONVERT(varchar, SYSDATETIME() ),'-',''),' ',''),':',''),'.',''),8)
    set @resultStr=@dateStr+@randStr1
    SET @resultBigint = CONVERT(BIGINT, @resultStr);

    return @resultBigint
end


GO

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值