1

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

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

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

亲切的问候 maciej pitucha

4

3 回答 3

9

SET DATEFORMAT ymd在批量插入语句之前运行

请注意,yyyy-mm-dd通常在 SQL Server 中并不安全:这是导致此问题的yyyy-dd-mm原因始终使用yyyymmdd. 有关更多信息,请参阅转换和验证日期字符串的最佳方法(评论特别突出此处的误解)

于 2012-05-02T13:44:16.060 回答
7

没有办法在批量插入上执行此操作。您有 2 个选项。

  1. 将日期作为 varchar 字段插入,然后运行查询以将日期转换为 DateTime 字段
  2. 使用 SSIS
于 2012-05-02T13:46:04.863 回答
2

您可能不关心这一天,但 SQL 会。
YYYYMM 不是有效的 SQL 日期。
日期必须有日期部分。
在您的示例中,它将其解析为 YYMMDD。
您可以按照 Jaimal 的建议插入 VarChar,然后附加 01 并转换。

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

或者您可以在 csv "," 中将全局替换为 "01,"。值得一试。

于 2012-05-02T15:24:21.983 回答