2016-09-29 57 views
0

如果 datetime2(7)类型与另一个类型相等,我正在寻找在TSQL WHERE子句中测试的正确语法。用于比较日期的TSQL查询的正确语法

WHERE (CAST(modifiedDate AS DATETIME) = '9/29/2016 3:24:24 PM') 

我也试过

WHERE (CAST(modifiedDate AS DATETIME) LIKE '9/29/2016 3:24:24 PM') 

而且

WHERE (CAST(modifiedDate AS datetime2) = CAST('09/29/2016 3:24:24 PM' AS datetime2)) 

我相信我有右侧陈述不正确,但在数据库中的精确值。

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

要清楚我曾尝试寻找其他的结果..”

enter image description here

我认为这是对本网站的搜索结果有点片状。

DB字段类型...

enter image description here

+0

铸造日期时间会给你milleseconds为好。所以上述不起作用。尝试使用毫秒进行比较,或者在第二秒内做一次范围检查 – ash

回答

2

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

CONVERT(DATETIME, '2016-09-28 15:34:00', 20) 

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

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

参考:CAST and CONVERT (Transact-SQL)

https://msdn.microsoft.com/en-us/library/ms187928.aspx


在一个不同的,但相互关联,注意:为什么日期时间值被存储在数据库中的字符串,而不是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' 

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

参考:Supported String Literal Formats for datetime2

https://msdn.microsoft.com/en-us/library/bb677335.aspx

+0

它们被存储为datetime2(7) – htm11h

+0

这也不起作用.... WHERE(CONVERT(DATETIME,modifiedDate,20)= CONVERT(DATETIME,'09/29/2016 3:24:24 PM',20 )) – htm11h

+0

查看链接 – htm11h

0

不知道哪里出现了问题。我想这取决于你如何存储你的日期值。如果它是datetime2,这工作正常。

DECLARE @testtable TABLE(
ID INT 
, modifieddate DATETIME2) 

INSERT INTO @testtable 
(id, modifieddate) 
VALUES 

(1, '9/29/2016 3:24:24 PM'), 
(2, '2/01/2016 3:24:24 PM'), 
(3, '6/25/2016 3:24:24 PM') 



SELECT * 
FROM @testtable 

SELECT * 
FROM @testtable 
WHERE CAST(modifieddate AS DATETIME2) = '09/29/2016 3:24:24 PM' 

SELECT * 
FROM @testtable 
WHERE modifieddate = '9/29/2016 3:24:24 PM' 

SELECT * 
FROM @testtable 
WHERE modifieddate = CAST('09/29/2016 3:24:24 PM' AS DATETIME2) 
+0

不起作用,我也尝试过。 – htm11h

+0

是的。查看示例代码。 – dfundako

+0

我的日期字段具有像这样的值='9/29/2016 3:24:24 PM' – htm11h