在 Excel VBA 上向 CSV 文件发送 SQL 查询不适用于日期列

Sending SQL Queries to CSV file on Excel VBA doesn't work for Date Columns

我正在尝试从一个超过 300 万行的 csv 文件中获取一些数据。我已经设置了一个 ADODB 连接到我的 csv 文件,除了查询日期列之外一切正常。

这是我设置连接的方式

Dim conn As New ADODB.Connection
Dim rst As New ADODB.Recordset

With conn
   .Provider = "Microsoft.ACE.OLEDB.16.0"
   .ConnectionString = "Data Source=" & fileDirPath & ";Extended Properties='text'"
End With

conn.Open

我发送的查询是

SELECT * FROM my_csv.csv WHERE myDate < 2030-12-01

虽然 myDate 列中的所有日期都小于 2030-12-01,但记录集 returns 为空结果。它不是那个日期的特定日期,myDate 列 returns 为空的任何查询。非常感谢您的支持。

我的 schema.ini 文件看起来像

[my_csv.csv]
DecimalSymbol=.
Format=CSVDelimited
ColNameHeader=True
DateTimeFormat=YYYY-MM-DD
DecimalSymbol=,
Col1=org_id Text 
Col2=app_id Text 
Col3=myDate Date(YYYY-MM-DD)
Col4=valid Text

我的数据是这样格式化的

cpt_id,rmn_id,myDate,valid
1285230,652671575,2019-03-12,true
1956123,1384198347,2019-03-15,true
2123640,1901167025,2019-02-21,true
2231241,1021153291,2019-03-02,true
7349946,1462824644,2019-03-07,true
7349946,4661867294,2019-03-16,true
1956123,3611518899,2019-03-01,true

对我来说,查询中指定的日期似乎需要用引号引起来,以防止数据成为减法问题。试试这个:

SELECT * FROM my_csv.csv WHERE myDate < '2030-12-01'

我对 ACE 数据库驱动程序的工作不多,如果它像旧的 JET,它可能需要井号 (#) 作为日期文字,所以如果上面的方法不起作用,试试这个:

SELECT * FROM my_csv.csv WHERE myDate < #2030-12-01#