【问题标题】:Converting varchar to bigint in T-SQL在 T-SQL 中将 varchar 转换为 bigint
【发布时间】:2018-02-10 22:29:10
【问题描述】:

我正在为我的 Web 应用程序使用 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))    

错误是:

消息 8114,第 16 级,状态 5,第 4 行
将数据类型 varchar 转换为 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 REPLACE(CONVERT(CHAR(30), '2017-09-02', 103), '-', '')) 可以缩短为set @calc = REPLACE(CONVERT(CHAR(30), '2017-09-02', 103), '-', '')
  • 你在这里采取的步骤太多了......这可以大大简化
  • 我知道,但我只是想说明关于子查询的观点。实际答案与您所说的相符。

标签: sql-server type-conversion bigint


【解决方案1】:

如果您有 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')

【讨论】:

    【解决方案2】:

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

    declare @paymentid as nvarchar(50)
    declare @someDate date = '2017-09-02'
    
    set @paymentid = convert(varchar(12),@someDate,12) + '0001'
    select @paymentid
    

    【讨论】:

      【解决方案3】:

      替换

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 2015-11-10
        • 2013-07-30
        • 2012-04-11
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多