You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OLEDB读取CSV时SQL日期过滤出现数据类型不匹配错误求助

问题解决:OLEDB 查询 CSV 时日期过滤的“数据类型不匹配”错误

问题根源

出现该错误的核心原因有两个:

  1. OLEDB 驱动的日期格式识别问题:Microsoft Jet OLEDB 4.0 默认对日期字面量的格式要求严格,DD/MM/YYYY 格式可能因系统 locale 被误解析为 MM/DD/YYYY(如 US 区域设置),导致无效日期或类型不匹配。
  2. 列数据类型推断错误:驱动会根据 CSV 文件前几行数据自动推断列类型,如果 LastUpdated 列存在空值、非日期格式内容,驱动可能将其识别为文本类型,与日期字面量比较时就会报错。

解决方案

方案1:使用无歧义的日期字面量格式

将日期转换为 ISO 标准格式(YYYY-MM-DD)并使用 # 包裹,这种格式不受 locale 影响,能被 Jet OLEDB 正确识别。修改后的 SQL 语句如下:

"SELECT * FROM [" & "1_RPA_GBR_AC_022.csv" & "] T WHERE LastUpdated >= #2023-03-20 00:00:00# AND LastUpdated <= #2023-03-27 00:00:00#"

方案2:通过 schema.ini 文件强制指定列数据类型

这是最可靠的长期解决方案,能彻底避免驱动自动推断类型的问题。在 CSV 文件所在的文件夹中创建名为 schema.ini 的文件,内容如下:

[1_RPA_GBR_AC_022.csv]
ColNameHeader=True
Format=Delimited(,)
Col1=LastUpdated DateTime
; 根据实际情况添加其他列的定义,例如:
; Col2=OtherColumn Text Width=100
; Col3=NumberColumn Integer

该文件明确告诉 OLEDB 驱动 LastUpdated 列是 DateTime 类型,无论 CSV 内容如何,都会按日期类型处理。

方案3:调整连接字符串参数

在连接字符串的扩展属性中添加日期格式和混合类型处理设置,辅助驱动正确解析日期:

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & [Extract Folder] & ";Extended Properties='text;IMEX=1;DateTimeFormat=dd/MM/yyyy';"
  • IMEX=1:强制驱动将混合类型列视为文本(但配合 schema.ini 使用时可省略)
  • DateTimeFormat=dd/MM/yyyy:明确指定日期解析格式为日/月/年

内容的提问来源于stack exchange,提问作者Sean Bailey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:25:11