【问题标题】:SQL Query on a MS Access CSV Export using PHP involving dates使用涉及日期的 PHP 对 MS Access CSV 导出进行 SQL 查询
【发布时间】: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


【解决方案1】:

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

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

Access 会将#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#

【讨论】:

  • 这在超过一天的时间段内确实有效。我希望有一天也能使用相同的查询!
  • [Date/Time Taken] >= #2016-05-01# AND [Date/Time Taken] < #2016-05-02#
  • 我添加了BETWEEN #2016-05-02 00:00:00 AM# AND #2016-05-02 23:59:59 PM#,现在效果很好。非常感谢您的帮助!
猜你喜欢
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多