将字符串 'yyyy-mm-dd' 转换为日期

新手上路,请多包涵

我想从日期列等于特定日期的表中进行选择,该日期作为字符串以“yyyy-mm-dd”格式发送。我需要转换该字符串,然后比较表中是否有该日期。

现在我正在这样做:

   select *
  FROM table
  where CONVERT(char(10), date_column,126) = convert(char(10), '2016-10-28', 126)

date_column 是表中的日期类型,我需要以这种格式“yyyy-mm-dd”从表中获取它,因为我使用 126 格式。我只是不确定在哪里转换已经采用该格式的字符串,是否需要转换它,因为我不知道使用它是否好:

  CONVERT(varchar(10), date_column,126) = '2016-10-28'

原文由 SeaSide 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 927
2 个回答

您也不需要转换列。事实上,最好不要转换列,因为在列上使用函数会阻止 sql server 使用任何可能有助于该列上的查询计划的索引。此外,您正在将字符串转换为 char(10) - 最好将其转换为日期:

 where date_column = convert(date, '2016-10-28', 126)

此外,如果您使用的是 datetime 数据类型而不是 date,则需要检查 datetime 值是否介于您传递到下一个日期的日期之间。

原文由 Zohar Peled 发布,翻译遵循 CC BY-SA 3.0 许可协议

你不需要这样做。 yyyy-MM-dd 是默认格式。

请注意,如果 date_column 中有时间戳,您还需要考虑时间。在这种情况下,你应该写这样的东西

... WHERE date_column >= '2016-10-28 00:00:00' AND date_column < '2016-10-29 00:00:00'

… WHERE date_column BETWEEN ‘2016-10-28 00:00:00’ 和 ‘2016-10-29 00:00:00’

正如我刚刚了解到的那样(与我想的不同) BETWEEN 实际上包括结束时间戳,因此 等同于上述 >= ... < 方法。

这也应该正确使用索引。

原文由 Thorsten Dittmar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进