我用BULK INSERT
阅读了CSV。在此CSV中,我将日期设置为MMM yyyy
(例如Jan 2016
)。
将此varchar转换为日期列的最佳方法是什么?
到目前为止,我仅找到使用内置格式的解决方案。这些格式都不符合我的格式。另请注意,缺少的day
应该获得值01
。这导致以下转换:
Jan 2016
-> 2016-01-01
(第二个日期的格式实际上并不重要。我通常使用yyyy-MM-dd
)
答案 0 :(得分:1)
注意:有关一步解决方案,请参见@Serge's comment;即使没有日期中的日期部分,此处提出的解决方案也可以正常工作。
我不知道在bulk insert
语句本身中有任何方法可以执行此操作。但是,将其分为两个步骤是很简单的:
将数据导入varchar列:
bulk insert MyDatabase.dbo.MyStagingTable
from '\\server\share\data.csv';
然后将varchar转换为日期。这可以作为更新语句来完成;尽管您更可能希望将其导入到staging
表中,然后在将该数据从暂存区移动到实际表时完成转换。
insert MyDatabase.dbo.MyActualTable (RealDate /*, ... */)
select convert(date, '01 ' + myPseudoDate, 106) /*, ... */
from MyDatabase.dbo.MyStagingTable