【发布时间】:2015-09-07 07:52:01
【问题描述】:
我正在尝试将 varchar 字段转换为日期时间。 varchar 字段中的数据看起来像这样dd/mm/yyyy hh.mm AM/PM。
我实际上是在尝试提取日期部分和时间部分并将它们分别转换为日期和时间。
我使用以下查询从 varchar 中提取日期部分并将其转换为日期。
SELECT DISTINCT LEFT([Start Date], 10)
,CASE WHEN ISDATE(LEFT([Start Date], 10)) = 1
THEN CONVERT(DATETIME, LEFT([Start Date], 10), 120)
END
,ISDATE(LEFT([Start Date], 10))
FROM [dbo].[TestTable]
我在整个 8 月都有上述格式的时间戳。
但查询以yyyy-dd-mm 格式为我提供了结果,并且日期仅在 2015 年 8 月 12 日之前转换为日期格式。 8 月 12 日之后的日期为空。我知道这是因为在 case 语句中它们返回 0。我怎样才能将这些值也转换为日期?
任何将所有值转换为yyyy-mm-dd hh:mm:ss 的建议都会非常有帮助。
提前致谢。
【问题讨论】:
-
如果它在 8 月 12 日之后失败,则表明它的转换错误,并将天解释为月,将月解释为天。由于没有第 13 个月,这就是它失败的原因。
-
使用
SET DATEFORMAT YMD, example -
@Damien_The_Unbeliever - 是的,就是这样。有什么解决办法吗?
-
@lad2025 - 谢谢,这很简单。我使用了
FORMAT()并将日期转换为yyyy-mm-dd格式,但是是否有解决方案可以将2015 年8 月12 日之后的日期转换为实际日期? -
@UnknownUser 在进行转换之前设置正确的 DATEFORMAT 它将起作用。
标签: sql-server date datetime