批量以YYYYMM格式将日期插入MS SQL表中的日期字段

时间:2012-05-02 13:41:53

标签: sql-server tsql sql-server-2008-r2 bulk date-formatting

我有一个大文本文件(超过3亿条记录)。有一个字段包含YYYYMM格式的日期。目标字段是日期类型,我正在使用MS SQL 2008 R2服务器。由于数据量巨大,我更喜欢使用批量插入。 这就是我已经做过的事情:

bulk insert Tabela_5
from 'c:\users\...\table5.csv'
with
(
    rowterminator = '\n',
    fieldterminator = ',',
    tablock
)
select * from Tabela_5
文件中的

201206在服务器上变成2020-12-06,而我希望它是2012-06-01(我不关心这一天)。 有没有办法将这种格式的日期批量插入日期类型的字段?

亲切的问候 maciej pitucha

3 个答案:

答案 0 :(得分:5)

在批量插入语句

之前运行SET DATEFORMAT ymd

请注意,yyyy-mm-ddyyyy-dd-mm在SQL Server中通常是安全:导致此问题。始终使用yyyymmdd。有关更多信息,请参阅best way to convert and validate a date string(这些评论特别强调了误解)

答案 1 :(得分:5)

批量插入无法执行此操作。你有2个选择。

  1. 将日期插入varchar字段,然后运行要转换的查询 日期到DateTime字段
  2. 使用SSIS

答案 2 :(得分:2)

你可能不关心这一天,但SQL确实如此 YYYYMM不是有效的SQL日期 日期必须包含日期组件 在您的示例中,它将其解析为YYMMDD 您可以插入到VarChar,因为Jaimal建议然后附加01并转换。

我会在.NET中读取数据,添加01并使用DateTime.ParseExact并逐行插入asynch。您可以捕获任何不成功的解析。

或者您可以在csv“,”到“01”中进行全局替换。值得一试。