使用 PHP 访问 CSV 导出的 SQL 查询涉及日期


SQL Query on a MS Access CSV Export using PHP involving dates

二月来破坏了我的sql。我得到一个生成的CSV文件,该文件基本上是来自MS Access数据库的转储。我无法修改数据库。我使用 PHP 对 CSV 文件运行查询,以便为老板生成报告。以下是我尝试运行的查询(数字 1 一直工作到 2 月到来):

1) SELECT * FROM [Orders.csv] WHERE [Order Taken By Associate Surrogate #] = 1009 AND [Date/Time Taken] BETWEEN #05/01/2016# AND #05/07/2016# AND NOT [Order Status Surrogate #] = 3

2) SELECT * FROM [Orders.csv] WHERE [Order Taken By Associate Surrogate #] = 1009 AND Format([Date/Time Taken], 'MM/dd/yyyy') BETWEEN #05/01/2016# AND #05/07/2016# AND NOT [Order Status Surrogate #] = 3

3) SELECT * FROM [Orders.csv] WHERE [Order Taken By Associate Surrogate #] = 1009 AND Format([Date/Time Taken], 'mm/dd/yyyy hh:nn:ss') BETWEEN #05/01/2016 00:00:00# AND #05/07/2016 23:59:59# AND NOT [Order Status Surrogate #] = 3

当我运行查询 1 时,我没有得到任何结果;而 2 和 3 返回所有内容。如果我运行一天的查询 2,那么它会返回正确的结果。查询中该时间段有 71 条记录。

查询日期并显示正确结果的正确方法是什么?

最后一点信息:

'Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq='.$file.';Extensions=asc,csv,tab,txt;Extended Properties="Excel 8.0;IMEX=1"'

您报告驱动程序将[Date/Time Taken]字段视为日期/时间数据类型。

因此,在将 Format() 函数与日期/时间值进行比较时,不应使用它。 Format()返回一个字符串,而不是日期/时间值。

访问会将#05/01/2016#解释为 5 月 1 日。 如果您实际上打算表示 1 月 5 日,请使用 #2016-01-05# 以避免混淆哪个部分是月份,哪个是日期。

有了这两个建议,请在WHERE子句中使用这样的条件......

[Date/Time Taken] BETWEEN #2016-01-05# AND #2016-07-05#

或者如果我猜错了日期...

[Date/Time Taken] BETWEEN #2016-05-01# AND #2016-05-07#