我有一个大文本文件(超过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
(我不关心这一天)。
有没有办法将这种格式的日期批量插入日期类型的字段?
答案 0 :(得分:5)
在批量插入语句
之前运行SET DATEFORMAT ymd
请注意,yyyy-mm-dd
和yyyy-dd-mm
在SQL Server中通常是不安全:导致此问题。始终使用yyyymmdd
。有关更多信息,请参阅best way to convert and validate a date string(这些评论特别强调了误解)
答案 1 :(得分:5)
批量插入无法执行此操作。你有2个选择。
答案 2 :(得分:2)
你可能不关心这一天,但SQL确实如此 YYYYMM不是有效的SQL日期 日期必须包含日期组件 在您的示例中,它将其解析为YYMMDD 您可以插入到VarChar,因为Jaimal建议然后附加01并转换。
我会在.NET中读取数据,添加01并使用DateTime.ParseExact并逐行插入asynch。您可以捕获任何不成功的解析。
或者您可以在csv“,”到“01”中进行全局替换。值得一试。