Я использую следующий запрос:

SELECT * 
FROM vaccines 
WHERE (initial_date BETWEEN '1/1/2018' AND '10/31/2018') 
  AND customer_id='110607' 
  AND item_description= 'FLUZONE .QUAD MDV';

Я не получаю результатов, и есть записи для этого диапазона дат, однако результаты отображаются до 9 месяца, с 10 -12 я ничего не получаю.

0
Jdeleon 15 Апр 2019 в 17:27

2 ответа

Лучший ответ

Q: Почему МЕЖДУ не находит дату окончания?

A: Вероятно, потому что MySQL выполняет сравнение string ; сравнение значений string , а не значений date .

Если мы сравниваем строки , обратите внимание, что любая строка начинается с '9' будет больше строки, начинающейся с '1'.

'9........'  is greater than '1........'

Аналогично

'9/23/1999'  is greater than '10/31/2001'

Даже если мы добавим лидирующие нули, сравнивая их как строки , мы все равно столкнемся с проблемами при сравнении года:

'09/23/2018'  is less than   '10/31/2001'
       ^^^^                         ^^^^ 

Если мы хотим использовать возможность MySQL для сравнения значений даты и даты и времени, то мы можем использовать собственные типы MySQL DATE и DATETIME и избегать сравнения строк.

Если столбец initial_date определен как тип DATE или DATETIME, укажите значения date в запросе, например,

 WHERE initial_date >= '2018-01-01' + INTERVAL 0 DAY 
   AND initial_date  < '2018-11-01' + INTERVAL 0 DAY

(Примечание: литералы даты MySQL могут быть представлены как 'YYYY-MM-DD'.)


Если столбцы initial_date определены как строковый тип (например, CHAR или VARCHAR), то мы можем преобразовать строковые значения в значение date , используя функцию STR_TO_DATE, например,

 WHERE STR_TO_DATE(initial_date,'mm/dd/yyyy') >= '2018-01-01' + INTERVAL 0 DAY 
   AND STR_TO_DATE(initial_date,'mm/dd/yyyy')  < '2018-11-01' + INTERVAL 0 DAY

(Обратите внимание, что второй аргумент является моделью формата; строка будет интерпретироваться в соответствии с этой моделью.)


0
spencer7593 15 Апр 2019 в 15:00

Пытаться

SELECT * 
FROM vaccines 
WHERE (initial_date BETWEEN CAST('2018-01-01' AS DATE) AND CAST('2018-10-31' AS DATE)) 
  AND customer_id='110607' 
  AND item_description= 'FLUZONE .QUAD MDV';
0
Jasmin Mistry 15 Апр 2019 в 14:32