我们收到一个csv文件,其中包含此日期格式的列- 2020年10月14日星期三08:00:00 CDT ,以及包含每个日期/时间计数的列< / p>
我正在使用SSIS包来抓取文件并将此数据导入sql表,然后可以按照所需的方式对其进行格式化,然后以所需的格式实际导出数据。
如果有一种方法可以在一个SSIS程序包中完成所有这些工作,但是我现在不知所措,但目前我正在努力将数据转换为SQL并转换为正确的格式,以便可以将其导出。
我需要获取该文件并将其转换为日期格式,然后将其分成两个单独的列
一栏将只是该日期的日期2020-10-14 00:00:00.000
一列时间就是这种格式的时间08:00:00.0000000
已更新,以更改日期以使其匹配,这样就不会造成混乱,也不会在运行下面的建议代码时收到错误。
Image of table with the data I am trying to convert
Screenshot of the error I receive when running the query by Aaron.
答案 0 :(得分:1)
如果此格式将始终使用,并且与时区无关,则可以先 try 将其转换为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
如果您需要从一个时区切换到另一个时区,那就是另一个问题。
答案 1 :(得分:0)
我只是显示日期格式,所以不要看我使用的实际日期示例。时区是无关紧要的,我只需要更改格式。 当我使用代码Aaron时,我遇到了一个转换错误:我假设它是因为表中的列是varchar,但是我无法将日期加载为日期格式,因为bc SSIS一直给我截断的错误-所以我有加载为varchar。
下面是我正在运行的代码,我对其进行了调整以使用我正在使用的列和表名称。
// Query
var qry = MyEventsContext.
.Where(<some logic>)
.Select(x => new MyViewModel
{
SpecialPropValue = x.Encounters.Where(e => e.Status == 1)
.Select(x => x.MySpecialProperty)
.FirstOrDefault()
});