用于比较日期的 TSQL 查询的正确语法

htm*_*11h 2 t-sql datetime

我正在寻找正确的语法来在 TSQL WHERE 子句中测试 datetime2(7) 类型是否等于另一个类型。

WHERE (CAST(modifiedDate AS DATETIME) = '9/29/2016 3:24:24 PM')
Run Code Online (Sandbox Code Playgroud)

我也尝试过

WHERE (CAST(modifiedDate AS DATETIME) LIKE '9/29/2016 3:24:24 PM')
Run Code Online (Sandbox Code Playgroud)

WHERE (CAST(modifiedDate AS datetime2) = CAST('09/29/2016 3:24:24 PM' AS datetime2))
Run Code Online (Sandbox Code Playgroud)

我相信我的右侧表述不正确,但这是数据库中的确切值。

我正在寻找与该日期时间戳匹配的所有记录。

需要明确的是,我确实尝试过搜索其他结果......”

在此输入图像描述

我认为这对于该网站上的搜索结果来说有点不稳定。

数据库字段类型...

在此输入图像描述

spe*_*593 5

要比较 DATETIME 值,您需要比较 DATETIME 值。您可以使用 TSQLCONVERT函数将字符串转换为 DATETIME 数据类型。例如:

CONVERT(DATETIME, '2016-09-28 15:34:00', 20)
Run Code Online (Sandbox Code Playgroud)

请注意,第三个参数是“风格”。上面的示例使用样式 20,即 ODBC Canonical 样式 YYYY-MM-DD HH:MI:SS(24 小时制)。还有其他几种可用的样式,也许您会找到一种与您的字符串格式匹配的样式。(如果找不到匹配项,则需要使用一些字符串操作函数将字符串重新格式化为可用样式的格式。)

作为第二个参数,您可以使用字符串文字(如上例所示),也可以使用对 CHAR 或 VARCHAR 列的引用。

参考:CAST 和 CONVERT (Transact-SQL)


在另一个不同但相关的问题上,请注意:为什么日期时间值在数据库中存储为字符串,而不是 DATETIME 数据类型?


如果列的数据类型是DATETIME2(7),那么我认为您会想要比较DATETIME2(7)数据类型。

如果我们进行“等于”比较,这将是完全匹配,包括秒的小数部分。如果要匹配给定秒内的 DATETIME2(7) 值,可以使用范围比较:

  WHERE t.my_col_datetime2_7  >= '2016-09-29 15:24:24'
    AND t.my_col_datetime2_7  <  '2016-09-29 15:24:25'
Run Code Online (Sandbox Code Playgroud)

请注意,允许与 DATETIME2 进行比较的字符串文字的格式是YYYY-MM-DD HH:MI:SS(24 小时制),带有可选的小数秒.nnnnnnn

参考:datetime2 支持的字符串文字格式