#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'
.