如何更正此删除查询

时间:2019-07-09 10:51:42

标签: sql sql-server string date

我需要执行以下选择查询:

select *
from faults
where insertdate < DATEADD(DAY, -30, sessiondate)

查询应该正确,但出现此错误:

  

从字符串转换日期和/或时间时转换失败。

因为,sessiondate包含日期,但为字符串,而不是日期格式。

是否可以使用字符串而不是日期类型来执行此查询?

1 个答案:

答案 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')

您应该将其与带有时间戳的值进行比较。