【发布时间】:2020-09-30 19:29:43
【问题描述】:
我知道这些日期转换问题有一百万个,但我找不到具体的问题来解决我的问题。
我有一个表,其中包含 [Date] 列,其中包含格式为 MM/DD/YYYY HH:MM 的数据,但存储为 varchar。
[Date] (varchar(255),null)
12/22/2017 0:34
12/21/2017 21:33
12/21/2017 21:17
...
我需要运行查询并按日期范围过滤,所以我需要弄清楚如何转换为可用的日期时间格式。
我试过了
WHERE CONVERT(VARCHAR(255), CAST([Date] AS DATETIME), 121) between @beg1 and @end1
但得到错误
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
我尝试了其他几个答案,但没有一个与我的数据格式完全相同,因此转换不起作用。
任何帮助将不胜感激
【问题讨论】:
-
另一个很好的例子,为什么将日期值存储在 varchar 列中是一个非常糟糕的主意
-
然后修复设计,@mikem115,将列更改为日期和时间数据类型。
smalldatetime在这里甚至可能是合适的。 -
关于问题的主题,快速访问documentation 会告诉您为什么样式代码
121(yyyy-mm-dd hh:mi:ss.mmm (24h)) 不起作用;哪个会。 -
@Larnu 我感谢您的意见。不幸的是,我们通过公司收购继承了一个管理不善的数据库。我是一个只读分析师,我们的 DBA 目前有很多大鱼要炒。像这样的变通办法将在几周内成为常态,同时他们完成所有修复。我检查了文档和样式代码
22是最接近的,但仍然无法使用 b/c of the year 格式。 -
你跳过了前几个样式:@mikem115 你想要样式 101 (
mm/dd/yyyy)
标签: sql-server datetime