将 Wed Oct 14 08:00:00 CDT 2020 格式转换为 DateOnly 和 Time Only

Convert Wed Oct 14 08:00:00 CDT 2020 format to DateOnly and Time Only

我们收到一个 csv 文件,其中有一列采用这种日期格式 -- Wed Oct 14 08:00:00 CDT 2020,以及一列每个 date/time

都有一个计数

我正在使用 SSIS 包获取文件并将此数据导入 sql table,然后我可以按照需要的方式对其进行格式化,然后实际将数据导出到需要格式。

如果有一种方法可以在一个 SSIS 包中完成这一切,我会洗耳恭听,但目前我正在努力将数据导入 SQL 并转换为正确的格式,以便我可以将其导出.

我需要获取该文件并转换该日期格式并将其拆分为两个单独的列

一列将只是这种格式的日期 2020-10-14 00:00:00.000

一栏将是这种格式的时间 08:00:00.0000000

已更新以更改日期以匹配,这样它就不会那么混乱,而且当 运行 下面的建议代码时我收到的错误也是如此。

Image of Error I'm recieving

Image of table with the data I am trying to convert

Image of table attributes

Screenshot of my screen when running a select * from the table I am pulling the data that I need converted

Screenshot of the error I receive when running the query by Aaron.

如果这是它将始终采用的格式,并且时区无关紧要,您可以先 尝试 将其转换为 datetime,然后您可以提取其中的部分。

SET LANGUAGE us_english; -- important because not all languages understand "Oct"

;WITH src AS 
(
  SELECT dt = TRY_CONVERT(datetime, RIGHT(OpenedDateTime ,4) 
              + SUBSTRING(OpenedDatetime, 4, 16))
         --, other columns...    
    FROM [dbo].[VIRTUALROSTERIMPORT_Res_Import]
)
SELECT OpenedDateTime = CONVERT(datetime, CONVERT(date, dt)), 
       OnHour = CONVERT(time, dt)
       --, other columns... 
FROM src;

结果:

OpenedDateTime   OnHour
--------------   ----------------
2020-10-14       08:00:00.0000000

如果您需要从一个时区转换到另一个时区,那就是另一回事了。

我只是在展示日期格式,请不要看我使用的实际日期示例。时区无关紧要,我只需要更改格式即可。 当我使用 Aaron 建议的代码时,我遇到了一个转换错误:我假设它是因为 table 中的列是 varchar,但我无法将日期加载为日期格式 bc SSIS 不断给我截断错误- - 所以我必须将其加载为 varchar。

下面是我 运行 的代码,我对其进行了调整以使用我正在使用的列和 table 名称。

SET LANGUAGE us_english; -- important because not all languages understand "Oct"

DECLARE @foo varchar(36) = 'Wed Oct 14 08:00:00 CDT 2020';

;WITH src(d) AS 
(
  SELECT TRY_CONVERT(datetime, RIGHT(@foo,4) + SUBSTRING(@foo, 4, 16))
)
SELECT OpenedDateTime = CONVERT(datetime, CONVERT(date, OpenedDateTime)), 
       onhour = CONVERT(time, OpenedDateTime) 
FROM [dbo].[VIRTUALROSTERIMPORT_Res_Import];