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

时间:2017-08-15 17:56:35

标签: sql sql-server

- 作品

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

- 为什么!!!

1 个答案:

答案 0 :(得分:2)

更改

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-08-15 7:12 PM

  

2017年8月15日下午7:12

哪个是正确的。

在第二个比较中

  

2017-08-15 7:12:19 PM

  

2017年8月15日下午7:12

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