【问题标题】:T-SQL Comparing SQL DateTime Variables don't work. Why?T-SQL 比较 SQL 日期时间变量不起作用。为什么?
【发布时间】:2017-08-15 17:56:34
【问题描述】:

-- 有效

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

--为什么!!!

【问题讨论】:

  • -- 如果 (CONVERT(DATETIME, @MyDateFormatString) = CONVERT(DATETIME, CONVERT(NVARCHAR(MAX), @MyDateFormat))) BEGIN PRINT 'YES!' 这不起作用END ELSE BEGIN PRINT 'NO' END 如果我能找到一些方法来完成上述工作,我将不胜感激
  • 您为什么希望它能够工作? 7:12:197:12
  • xD 只是没想到 SQL 会浪费我的时间

标签: sql sql-server


【解决方案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-08-15 下午 7:12

2017 年 8 月 15 日晚上 7:12

哪个是正确的。

在你比较的第二个中

2017-08-15 下午 7:12:19

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

【讨论】:

  • 谢谢。这就是我没有发现的原因: DECLARE DateTimeAutoConverted DATETIME = CONVERT(DATETIME, '2017-08-15 7:12:19 PM') DECLARE DateTimeAutoConvertedString NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX), DateTimeAutoConverted) PRINT DateTimeAutoConvertedString SQL 是在自动转换我给它的字符串时,可以减少秒数。有什么办法吗?
  • 改用 DATETIME2 试试
  • @Shiasu-sama 看看我的编辑,如果你有任何问题,请告诉我。 :-)
  • 嘿,谢谢。你的解决方法比我的好;我最终做了这样的事情 WHERE YEAR(CONVERT(DATETIME, [DateOne])) = YEAR(CONVERT(DATETIME, [DateTwo])) AND MONTH(CONVERT(DATETIME, [DateOne])) = MONTH(CONVERT(DATETIME, [DateTwo])) AND DAY(CONVERT(DATETIME, [DateOne])) = DAY(CONVERT(DATETIME, [DateTwo])) 比较繁琐
猜你喜欢
  • 2017-11-11
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多