在 T-SQL 中将 varchar 转换为 bigint

Converting varchar to bigint in T-SQL

我正在为我的网络应用程序 SQL 做计算部分,

我有一些标量变量:

declare @calc as bigint
declare @paymentid as nvarchar(50)

我正在使用这样的变量

set @calc =(SELECT REPLACE(CONVERT(CHAR(30), '2017-09-02', 103), '-', ''))     

此行删除 '-' 并将 @calc 中的值设置为 (20170902)

set @calc = (SELECT SUBSTRING(CONVERT(char(30), '2017-09-02',112), 3, 8))    

这一行正在获取 170902 并将 @calc 中的值设置为 (170902)

set @paymentid =  CAST(@calc as nvarchar(max))+'0001'

并且此行会将 paymentid 的值设置为 (1709020001)

但是我在这一行遇到错误

set @calc = (SELECT SUBSTRING(CONVERT(char(30), '2017-09-02',112), 3, 8))    

错误是:

Msg 8114, Level 16, State 5, Line 4
Error converting data type varchar to bigint

我的整个代码如下所示

declare @calc as bigint
declare @paymentid as nvarchar(50)

set @calc =(SELECT REPLACE(CONVERT(CHAR(30), '2017-09-02', 103), '-', ''))     
set @calc = (SELECT SUBSTRING(CONVERT(char(30), '2017-09-02',112), 3, 8))    
set @paymentid =  CAST(@calc as nvarchar(max))+'0001' 

替换

set @calc = (SELECT SUBSTRING(CONVERT(char(30), '2017-09-02',112), 3, 8))   

set @calc = (SELECT SUBSTRING(CONVERT(char(30), @calc,112), 3, 8))   

如果您有 SQL Server 2012 或更高版本,您可以这样做:

declare 
    @now date = getdate(), -- using getdate, but you can put in a hard coded or provided date as necessary
    @paymentid nvarchar(50)

select @paymentid = format(@now, 'yyMMdd0001')

select @PaymentId --1709010001

或更简洁....

select @paymentid = format(getdate(), 'yyMMdd0001')

你可以把它缩短很多...

declare @paymentid as nvarchar(50)
declare @someDate date = '2017-09-02'

set @paymentid = convert(varchar(12),@someDate,12) + '0001'
select @paymentid