[英]Conversion failed when converting date and/or time from character string -
我有以下查询:
declare @migdate as varchar(10)
set @migdate = 20140501
SELECT ID, (CASE WHEN a.HD ='abc'
THEN DATEADD(YEAR,1,a.LTST_DATE)
ELSE
CASE WHEN DATEDIFF(MONTH,a.LTST_DATE,@MIGDATE) > 0
THEN DATEADD(MONTH,DATEDIFF(MONTH,a.LTST_DATE,@MIGDATE)+1,a.LTST_DATE)
ELSE '99991231'
END
END) AS NEXT_CHARGE_DATE
from table a
注意:表中的 LTST_date 也是 varchar。
我收到错误
Conversion failed when converting date and/or time from character string.
我在这里做错了什么吗?
@migdate
是一个 varchar,所以你怎么能在它上面做一个datediff
或dateadd
,它们是日期操作而不是字符串操作? 您需要convert
变量convert
或cast
convert
为datetime
或date
或datetime2
数据类型。 IE:
declare @var varchar(10) = '20050305'
select datediff(YYYY, getdate(), convert(datetime, @var, 100))
请注意 100 是日期时间字符串的格式,请在联机丛书中查找各种格式。
同样在一种情况下,您返回一个日期时间类型(来自 DateAdd),但在另一个分支中您返回一个 varchar。 您在该列中需要什么数据类型?
DATEADD 函数的第三个参数和 DATEDIFF 函数的第二个参数应该是日期。 但是在您的情况下,它们是字符串(您说表中的 LTST_date 是 varchar)。 因此,要么更改表,使 LTST_date 为日期,要么在函数中应用 LTST_date 之前将 LTST_date 从字符串转换为日期
DECLARE @migdate AS DATE = '20140501'
SELECT ID,
(
CASE WHEN a.HD ='abc' THEN DATEADD(YEAR,1,a.LTST_DATE)
ELSE CASE WHEN DATEDIFF(MONTH,a.LTST_DATE,@MIGDATE) > 0 THEN DATEADD(MONTH,DATEDIFF(MONTH,a.LTST_DATE,@MIGDATE)+1,a.LTST_DATE)
ELSE '99991231' END END
) AS NEXT_CHARGE_DATE
FROM [table] a
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.