【问题标题】:SQL Server - Cast specific string date format to date datatypeSQL Server - 将特定字符串日期格式转换为日期数据类型
【发布时间】:2022-02-17 23:19:01
【问题描述】:

我正在尝试使用以下代码将数据插入 Microsoft SQL 中的 DATE 列:

INSERT INTO sde.AMD_NDVI_CAT (OBJECTID, Name, ImageDate) 
VALUES (6199,'VI_{960D55A4-EEFD-45DD-80FD-81B5113C43D5}_20220122T090159', CAST('20220122T090159' AS DATE))

我得到的是:

Conversion failed when converting date and/or time from character string.

要插入ImageDate 列的数据格式为YYYYMMDDTHHMMSS。我在 Microsoft 网页 (https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15) 上没有找到这种格式。如何将其转换为日期以便插入到表格中?

谢谢!

【问题讨论】:

    标签: sql sql-server date


    【解决方案1】:

    既然date 建议你不在乎时间:

    SELECT CONVERT(date, LEFT('20220122T090159', 8));
    

    如果你也需要时间,它会变得很丑。

    DECLARE @funny_string char(15) = '20220122T090159';
    
    SELECT TRY_CONVERT(datetime, 
      LEFT(@funny_string, 8) + ' ' 
      + STUFF(STUFF(RIGHT(@funny_string, 6), 3, 0, ':'),6, 0, ':'));
    

    【讨论】:

    • 谢谢,但我也需要时间。
    • @Litwos 如果需要时间,则需要更改表中的数据类型,因为date 不存储时间。
    • 也许比使用LEFT/RIGHT 稍微简单一点,就是使用第三个STUFF() 删除T 并在日期和时间之间添加所需的空格-TRY_CONVERT(datetime, STUFF(STUFF(STUFF(@funny_string, 14, 0, ':'), 12, 0, ':'), 9, 1, ' ')),(如果不是更简单,略短)但仍然很难看,并且生成的字符串完全相同,因此完全是个人喜好。
    【解决方案2】:

    如果您需要同时捕获日期和时间,那么我们可以使用TRY_CONVERT 以及一些字符串操作:

    SELECT TRY_CONVERT(datetime,
                       LEFT(ts, 8) + ' ' + SUBSTRING(ts, 10, 2) + ':' +
                       SUBSTRING(ts, 12, 2) + ':' + SUBSTRING(ts, 14, 2))
    FROM t;
    

    Demo

    请注意,这里我从输入字符串 20220122T090159 构建时间戳 20220122 09:01:59。

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 1970-01-01
      • 2018-08-30
      • 2017-02-14
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2013-12-28
      相关资源
      最近更新 更多