【发布时间】: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