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

时间:2020-10-16 18:09:07

标签: sql-server ssis date-conversion

我们收到一个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 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.

2 个答案:

答案 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()   
    });