我在下面的查询中收到错误。
查询
microbenchmark
错误
Msg 242,Level 16,State 3,Line 1 varchar数据的转换 键入日期时间数据类型会导致超出范围的值。
答案 0 :(得分:1)
我怀疑您是在收到错误,因为您从GETDATE()
开始计算年份和月份,然后从Expiry_Date
追加当天。
如果您的Expiry_Date
值中的任何一个值为31,则该值将在9月份无效,GETDATE()
将返回:
运行以下内容:
SELECT CONVERT(DATETIME,
CONVERT(VARCHAR, YEAR(GETDATE())) + '/' +
CONVERT(VARCHAR, MONTH(GETDATE())) + '/' +
CONVERT(VARCHAR, 31) -- Fails with 31
) AS Exp_date1;
错误:
Msg 242,Level 16,State 3,Line 1 将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
这个有用的地方:
SELECT CONVERT(DATETIME,
CONVERT(VARCHAR, YEAR(GETDATE())) + '/' +
CONVERT(VARCHAR, MONTH(GETDATE())) + '/' +
CONVERT(VARCHAR, 30) -- Works with 30
) AS Exp_date1;
您需要在逻辑中考虑天数和月值,或者以更好的方式使用Expiry_Date
。我不确定您为什么要在当前年份和月份追加任何日期值。如果要将值过滤到当前月份,请使用where
子句首先检查值。