2017-08-15 43 views
1

- 工程比较SQL DateTime变量的T-SQL不起作用。为什么?

DECLARE @MyDateFormatString NVARCHAR(MAX) = '2017-08-15 7:12:19 PM' 
PRINT @MyDateFormatString 
DECLARE @MyDateFormat DATETIME = '2017-08-15 7:12:19 PM' 
PRINT @MyDateFormat 
IF (CONVERT(DATETIME, @MyDateFormatString) = CONVERT(DATETIME, @MyDateFormat)) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

- 不起作用

IF (CONVERT(DATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

- 为什么!

+0

- 这不起作用 IF(CONVERT(DATETIME,@MyDateFormatString)= CONVERT(DATETIME, CONVERT(NVARCHAR(MAX),@MyDateFormat)))开始打印'YES!' END ELSE BEGIN PRINT'NO'END 如果我能够找到某种方法来完成上述工作,我将非常感激它 –

+0

您为什么期望它能够正常工作? 7:12:19 <> 7:12 –

+0

xD只是没想到SQL只是把我的秒丢进了void –

回答

1

变化

IF (CONVERT(DATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

IF (CONVERT(DATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12:19 PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

IF (CONVERT(DATETIME, '2017-08-15 7:12 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

你的第二个查询你不比较秒。在第一个查询你比较

2017年8月15日1:35 AM

2017年8月15日1:35 AM

这是正确的。

在第二个你比较

2017年8月15日下午7点12分十九秒

2017年8月15日1:35 AM

7:12:19和7:12不一样。所以改变其中的任何一种格式都是正确的。

编辑:

为了解决您的评论,如果你想不秒DATETIME SMALLDATETIME使用,它会在你的情况下工作。使用原来的第二个查询来看看这个例子。但要小心,它减少了时间格式为hh:mm:00,所以警惕这个:

IF (CONVERT(SMALLDATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 
+0

谢谢。这也是为什么我没有当场表示: DECLARE DateTimeAutoConverted DATETIME = CONVERT(DATETIME, '2017年8月15日下午7点十二分19秒') DECLARE DateTimeAutoConvertedString NVARCHAR(MAX)= CONVERT(NVARCHAR(MAX),DateTimeAutoConverted) PRINT DateTimeAutoConvertedString 当我自动转换字符串时,SQL非常友好,会丢弃秒数。有什么办法呢? –

+0

请用DATETIME2代替 –

+0

@ Shiasu-sama看看我的编辑,如果您有任何问题,请告诉我。 :-) – Simon

相关问题