SQL Server - 将特定的字符串日期格式转换为日期数据类型

0 人关注

我试图用下面的代码将数据插入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。我在微软的网页上没有找到这种格式(https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15)。我怎样才能将其转换为日期,以便插入到表中?

sql
sql-server
date
Litwos
Litwos
发布于 2022-02-17
2 个回答
Aaron Bertrand
Aaron Bertrand
发布于 2022-02-17
已采纳
0 人赞同

由于 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, ' ')) ,(如果不是更简单,就是稍微短一点)但还是很丑,得到的字符串完全一样,所以完全出于个人喜好。
Tim Biegeleisen
Tim Biegeleisen
发布于 2022-02-17
0 人赞同

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

SELECT TRY_CONVERT(datetime,
                   LEFT(ts, 8) + ' ' + SUBSTRING(ts, 10, 2) + ':' +