【问题标题】:Parsing Dates in SQL在 SQL 中解析日期
【发布时间】:2015-06-13 01:25:55
【问题描述】:

我的数据库中有一个当前是 varchar 的列。数据如下所示:

Thu, 4 Jul 2013 09:18:24 
Thu, 11 Jul 2013 10:07:01
Tue, 28 Jan 2014 11:38:37
Fri, 26 Jul 2013 14:13:42

我希望能够将其转换为日期,以便获取最新记录。

【问题讨论】:

  • 请描述您最近的努力及其结果。
  • 您需要使用 CONVERT() 并且需要将您的日期字符串与相应的日期值相匹配。 SQL server 比 Oracle 更难转换日期。
  • @Doug,Mitch Wheat 下面的回答让它看起来很简单......
  • 我目前卡在 SQL Server 2008 上,所以这是新版本中的一个不错的功能。
  • 对 SQL Server 2008 的主流支持已于 2014 年 7 月 8 日结束;延长支持将于 2019 年 7 月 9 日结束

标签: sql sql-server-2012 sql-server-2014


【解决方案1】:

SQL Server 2012 以上,可以使用TRY_PARSE:

-- If the culture argument isn't provided, the language of current session is used.
SELECT TRY_PARSE('Thu, 4 Jul 2013 09:18:24' AS datetime2) AS 'datetime2'; 

TRY_PARSE:返回表达式的结果,翻译成请求的数据 类型,如果转换失败,则为 null

【讨论】:

    【解决方案2】:

    假设字符串始终以三个字符的日期文字开头,后跟逗号和空格,您可以使用 substring() 切断开头,然后使用 cast() 将字符串转换为正确的日期时间,如下所示:

    cast(substring(your_date_col, 6, len(your_date_col)) as datetime)
    

    SQL Fiddle example

    还有很多其他方法可以做到这一点;如果您想了解更多信息,请阅读 cast/convert 和 string 函数。 (并考虑改用 try_cast/try_convert)。

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多