Извлекать значения между двумя датами — версия MariaDB: 10.1.37

#mysql #mariadb

#mysql #mariadb

Вопрос:

Я пытаюсь извлекать значения между двумя датами, в частности, 24 часа

 SELECT * 
FROM `transactions` 
WHERE accnum = '1534610376' 
    AND tdate BETWEEN 20190311 AND 20190312 
  

Этот запрос работает нормально, но я не хочу, чтобы он был постоянным для даты, я проверил и видел много форматов, но, похоже, ни один не работает. пожалуйста, помогите

Комментарии:

1. «версия sql Server: 10.1.37» — Больше похоже на MariaDB . SQL Server — это другой продукт. Пожалуйста, не перепутайте их.

2. SQLServer 10.1.7 или MySQL — Это не одно и то же

3. @PaulSpiegel Версия сервера: 10.1.37-MariaDB да, это

4. Вы используете этот код на PHP? Или непосредственно в базе данных?

5. @RiggsFolly непосредственно в базе данных (phpmyadmin)

Ответ №1:

Если вам «нужны записи только с сегодняшнего дня» — простым способом было бы:

 WHERE accnum = '1534610376' 
    AND DATE(tdate) = CURRENT_DATE()
  

Однако — Для использования индекса столбец не должен быть обернут в функцию. Таким образом, эффективным способом было бы

 WHERE accnum = '1534610376' 
    AND tdate >= CURRENT_DATE()
    AND tdate <  CURRENT_DATE()   INTERVAL 1 DAY
  

Хорошим индексом для этого запроса было бы INDEX(accnum, tdate) .

Комментарии:

1. Тогда оптимальным индексом было бы INDEX(accnum, tdate) .

2. Правильно, @Rick — Включил это в ответ.

Ответ №2:

Я предлагаю вам поместить вашу дату между цитатами вот так:

 SELECT * 
FROM `transactions` 
WHERE accnum = '1534610376' 
    AND tdate BETWEEN '20190311' AND '20190312'
  

После этого вы можете определить пользовательскую функцию следующим образом :

 CREATE FUNCTION BetweenDate(@toCompare VARCHAR(30), @rightDate DATE, @leftDate DATE)  
RETURNS TABLE
AS   
BEGIN  
    RETURN (
        SELECT *
        FROM transactions
        WHERE accum = @toCompare AND tdate BETWEEN @rightDATE AND @leftDate
    )
END; 
  

Комментарии:

1. значение accnum также не является константой в активной $ сессии, я просто тестирую его вручную в phpmyadmin

2. Таким образом, вы можете удалить параметр @toCompare и его ок

3. Кавычки не будут иметь никакого значения. Однако обычный способ указания даты действительно должен заключаться в кавычки: '2019-03-11' .