SQL-запрос на MS Access CSV Export с использованием PHP с датами

Февраль пришел и сломал мой sql. Я получаю сгенерированный файл CSV, который в основном является дампом из базы данных MS Access. У меня нет возможности изменять базу данных. Я использую PHP для выполнения запросов к файлам CSV, чтобы генерировать отчеты для босса. Вот запросы, которые я пытался выполнить (номер 1 работал до февраля):

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"'

1

Решение

Вы сообщили, что водитель видит ваш [Date/Time Taken] поле как дата / время тип данных.

Таким образом, вы не должны использовать Format() функция при сравнении его со значениями даты / времени. Format() возвращает строку, а не значение даты / времени.

Доступ будет интерпретировать #05/01/2016# означать 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#
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]