【问题标题】:MSSQL Handle/Split Unknown Date String FormatMSSQL 句柄/拆分未知日期字符串格式
【发布时间】:2017-10-01 00:54:54
【问题描述】:

服务器类型:MSSQL 2014

我的字符串:VARCHAR '2/05/2017 7:54:51 PM'

我需要将其转换为任何受支持的 DateTime 格式(或者最好直接转换为纪元)。 它需要处理 NULL 和 ""(空白)行。

我花了好几个小时来搜索答案,谷歌却无济于事。令人沮丧的是存储格式与日期格式 131 仅略有不同。

我尝试过诸如;

FORMAT(CONVERT(DATETIME, '2/05/2017 7:54:51 PM'), 'dd/MM/yyyy hh:mm:ss')
CONVERT(DATETIME, '2/05/2017 7:54:51 PM',22)
CONVERT(DATETIME, '2/05/2017 7:54:51 PM',131)

/* SQL 错误 (241): 从字符串转换日期和/或时间时转换失败。 */

/* SQL 错误 (242):将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。 */

还有一大堆使用 SUBSTRING/CHARINDEX 等的方法来尝试单独处理每个部分,但无济于事。

【问题讨论】:

    标签: sql-server tsql datetime sql-convert


    【解决方案1】:
    SELECT CONVERT(DATETIME, '2/05/2017 7:54:51 PM',131)
    SELECT CONVERT(DATETIME, '2/05/2017 7:54:51 PM',22) -- wrong date time format
    

    22 输入格式错误 请看https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

    【讨论】:

      【解决方案2】:

      找到我的解决方案。由于误解“CONVERT”而弄错了

      解决方案:

      DECLARE @wrongdate DATETIME = CONVERT(VARCHAR, TRY_PARSE('2/05/2017 7:54:51 PM' AS DATETIME USING 'en-gb'), 121);
      SELECT convert(bigint, datediff(ss,  '01-01-1970 00:00:00', @wrongdate));
      

      如果您打算对选择的结果进行操作,则需要对其进行操作,因此,请将选择更改为;

      (CONVERT(bigint, datediff(ss,  '01-01-1970 00:00:00', CONVERT(VARCHAR, TRY_PARSE(CAST([MyColumn].Object AS VARCHAR) AS DATETIME USING 'en-gb'), 121)))) AS [my_column]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2015-12-12
        相关资源
        最近更新 更多