【问题标题】:How to convert string to datetime in SQL如何在 SQL 中将字符串转换为日期时间
【发布时间】:2018-08-26 03:04:29
【问题描述】:

我已经完成了在 SQL Server 2016 中将字符串转换为日期的工作,但从未见过如下格式的日期。我在网上寻找了一种可能的方法来转换它但没有成功。任何帮助我将下面的字符串转换为 SQL 中的datetime 数据类型的帮助将不胜感激。

Fri Aug 24 2018 22:28:40

问候,

【问题讨论】:

  • 什么数据库引擎和版本?
  • MS SQL Server 2016
  • 我不确定 SQL Server 是否可以直接转换您的日期时间字符串。
  • 不要在 SQL 中使用逻辑...将其委托给您的业务逻辑语言... ASP? 。网? C#?
  • 我不熟悉这些语言。我通常在 SQL 中构建所有逻辑

标签: sql sql-server tsql type-conversion sql-server-2016


【解决方案1】:

在 SQL Server 中找到了一种方法:

select cast(right("string",20) as datetime) as dateColumn
from table

【讨论】:

  • 只是提一下:注意语言依赖性。 “Aug”在很多情况下都有效,但“Dec”在我的文化中是“Dez”......这可能在很多情况下有效,但仍然会在另一个系统上中断。
【解决方案2】:

在处理非标准日期格式时,我通常在 SQL Server 中查找 CONVERT 函数,因为它非常“弹性”:您可以为其提供各种格式,因此它可以正确识别它们。

我使用this site 作为参考。在那里你可以发现,最接近的日期格式用 100 表示:

0   100    mon dd yyyy hh:miAM/PM    Default

这是您的格式,但在这种情况下不包含不必要的星期几信息。所以你需要做的就是删掉Fri 部分:

substring(myDatetimestring, 5, 1000)

甚至更好

substring(myDatetimeString, charindex(' ', myDatetimeString), 1000)

如果星期部分可能有可变长度。不用担心1000,它只保证我们将拥有字符串的其余部分,而不是更少。

现在我们有了正确的日期格式,因为它说它是默认的,我们不需要提供 100convert 函数,我们也可以使用 cast 函数,正如你发现的那样,所以我们可以做:

cast(substring(myDatetimeString, charindex(' ', myDatetimeString), 1000) as datetime)

convert(datetime, substring(myDatetimeString, charindex(' ', myDatetimeString), 1000), 100)

convert(datetime, substring(myDatetimeString, charindex(' ', myDatetimeString), 1000))

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 2021-01-05
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2021-06-26
    • 2017-05-05
    相关资源
    最近更新 更多