我需要执行以下选择查询:
select *
from faults
where insertdate < DATEADD(DAY, -30, sessiondate)
查询应该正确,但出现此错误:
从字符串转换日期和/或时间时转换失败。
因为,sessiondate包含日期,但为字符串,而不是日期格式。
是否可以使用字符串而不是日期类型来执行此查询?
答案 0 :(得分:1)
错误似乎很明显。 insertdate
和/或sessiondate
存储为字符串。您应该修复数据。
SQL Server具有三种转换此类值的方法:
CAST()
/ CONVERT()
。PARSE()
明确灵活地使用您需要弄清楚您的格式是什么。他们可以将其转换。您没有提供任何信息,但是典型的方法是:
where insertdate < DATEADD(DAY, -30, TRY_CONVERT(date, sessiondate, <date style here>))
通常CONVERT()
可用的格式就足够了(请参阅here)。有时,您可能需要使用TRY_PARSE()
。
编辑:
要支持时间戳,则需要转换为datetime2
:
try_convert(datetime2, '2019-07-08T09:17:19+02:00')
您应该将其与带有时间戳的值进行比较。