【发布时间】:2016-05-18 11:23:36
【问题描述】:
二月来了,打破了我的 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"'
【问题讨论】:
-
这是一个 csv 文件,因此很可能适用字符串比较规则。尝试将日期格式化为最重要的优先,例如
yyyy-mm-dd hh:mm:ss,然后即使使用字符串规则也会按预期进行比较/排序。 -
这有一些影响,但仍然没有提供正确的信息。在 CSV 文件中,日期是这样写的:
,06/02/2016 12:30:35, -
从其他表的INI文件看,该字段是
Date字段。 -
这个查询返回什么?
SELECT DISTINCT TypeName([Date/Time Taken]) FROM [Orders.csv] -
我从那个查询中得到
[Expr1000] => Date。
标签: php sql date csv ms-access-2010