MSSQL将自定义格式的varchar转换为日期

时间:2018-11-07 09:47:34

标签: sql sql-server casting

我用BULK INSERT阅读了CSV。在此CSV中,我将日期设置为MMM yyyy(例如Jan 2016)。

将此varchar转换为日期列的最佳方法是什么?


到目前为止,我仅找到使用内置格式的解决方案。这些格式都不符合我的格式。另请注意,缺少的day应该获得值01。这导致以下转换:

Jan 2016-> 2016-01-01(第二个日期的格式实际上并不重要。我通常使用yyyy-MM-dd

1 个答案:

答案 0 :(得分:1)

注意:有关一步解决方案,请参见@Serge's comment;即使没有日期中的日期部分,此处提出的解决方案也可以正常工作。


原始答案

我不知道在bulk insert语句本身中有任何方法可以执行此操作。但是,将其分为两个步骤是很简单的:

  1. 将数据导入varchar列:

    bulk insert MyDatabase.dbo.MyStagingTable  
    from '\\server\share\data.csv'; 
    
  2. 然后将varchar转换为日期。这可以作为更新语句来完成;尽管您更可能希望将其导入到staging表中,然后在将该数据从暂存区移动到实际表时完成转换。

    insert MyDatabase.dbo.MyActualTable (RealDate /*, ... */)
    select convert(date, '01 ' + myPseudoDate, 106) /*, ... */
    from MyDatabase.dbo.MyStagingTable