Неверный подсчет параметров при вызове собственной функции "DATEDIFF"

Я получаю ошибку из этой строки

SELECT table.field
FROM table
WHERE table.month = 'october'
AND DATEDIFF(day, table.start_date, table.end_date) < 30

Даты в моей колонке в формате м-д-гг

Нужно ли конвертировать это в другой формат? Если да, то как?

Использование MariaDB


person Alex Borsody    schedule 23.04.2014    source источник
comment
Это SQL-сервер? И какова остальная часть вашего запроса? И какой тип данных у этих столбцов?   -  person juergen d    schedule 23.04.2014
comment
Пожалуйста, покажите полный запрос, полное сообщение об ошибке и укажите, какую СУБД вы используете (MS SQL Server, MySQL, PostGreSQL и т. д.).   -  person MatBailie    schedule 23.04.2014
comment
Мне нужно преобразовать даты в формате d-m-yy в формат даты unix. Я думаю, что потребуются регулярные выражения для размещения 0 перед числом, если месяц или день имеют только одну цифру.   -  person Alex Borsody    schedule 23.04.2014


Ответы (3)


Согласно документации для MariaDB DATEDIFF принимает только два аргумента:

Синтаксис

DATEDIFF(expr1,expr2)

Описание

DATEDIFF() возвращает (expr1 – expr2), выраженное как значение в днях от одной даты до другой. expr1 и expr2 — это выражения даты или даты и времени. В расчете используются только части дат значений.

person D Stanley    schedule 23.04.2014

@alex_b очень часто можно запутаться в синтаксисе функций DATEDIFF и TIMESTAMPDIFF. Переход по ссылке, безусловно, поможет разобраться с синтаксисом DATEDIFF и на этой странице будут перечислены все остальные функции, связанные с датой, доступные в базе данных MariaDB. родительский MySQL.\

Ссылка на приведенные выше ссылки представляет собой краткое изложение -

TIMEDIFF(expr1,expr2)
expr1 - '2000:01:01 00:00:00'
expr2 - '2000:01:01 00:00:00.000001'

TIMEDIFF() возвращает expr1 — expr2, выраженное как значение времени. expr1 и expr2 являются выражениями времени или даты и времени, но оба должны быть одного типа.

DATEDIFF(expr1,expr2)
expr1 - '2007-12-31 23:59:59'
expr2 - '2007-12-30'

DATEDIFF() возвращает expr1 — expr2, выраженное как значение в днях от одной даты до другой. expr1 и expr2 являются выражениями даты или даты и времени. В расчете используются только части дат значений.

Ниже приведен сценарий, для которого я его использовал:

  • используя CURDATE для текущей даты в качестве «аргумента1»
  • используя существующий столбец varchar как «argument2»
  • используя команду SET для обновления столбца

SET output_date = DATEDIFF(CURDATE(),input_date),... выше сработало для меня. Удачи!

person nitinr708    schedule 24.06.2015

DATEDIFF of datediff возвращает значение, представляющее собой разницу между двумя датами в днях. Итак, datediff(mydate1, mydate2) вернет X дней; где mydate1 должен быть больше, чем mydate2. Я считаю, что приведенный ниже SQL-запрос поможет вам достичь желаемого результата.

SELECT table.field
FROM table
WHERE (table.month = 'october'
AND (datediff(table.end_date, table.start_date) < 30))
person mickySimons    schedule 07.07.2021