将 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];
我们收到一个 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];