2013-03-09 5 views
2

Я пишу этот запрос в базе данных mySQL. Таблица listing имеет две колонки StartDate & EndDate. Я хочу вернуть Duration, т. Е. Количество дней между этими двумя датами, используя DATEDIFF. Мой запрос:SQL-запрос DATEDIFF возвращающий NULL

SELECT DATEDIFF(StartDate, EndDate) as 'Duration' FROM listing; 

Таблица возвращает NULL в столбце Длительность.

И если я пишу,

SELECT DATEDIFF(day, StartDate, EndDate) as 'Duration' FROM listing; 

возвращает

Error Code: 1582. Incorrect parameter count in the call to native function 'datediff' 0.000 sec 

Любая помощь будет оценена.

+0

Что такое два значения, если начальная и конечная? –

+0

Каковы типы данных этих столбцов? –

ответ

4

Проблема заключалась в том, что DATEDIFF() ожидает, что даты, чтобы быть в формате YYYYMMDD и входами колонки StartDate и EndDate, что я давал был MMDDYYYY. Я изменил его на YYYYMMDD, и он сработал. Итак, следующее выражение с датами в формате YYYYMMDD работает отлично.

SELECT DATEDIFF(StartDate, EndDate) as 'Duration' FROM listing; 
0

Два параметра указаны правильно. Если вы получаете NULL, это, вероятно, потому, что значения в этих столбцах не относятся к дате или дате.

Из документов MySql:

DATEDIFF(expr1,expr2) 
DATEDIFF() returns expr1 – expr2 expressed as a value in days from one date to the other. expr1 and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation. 

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); 
    -> 1 
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31'); 
    -> -31 
+0

Эй, Брэд, проблема была в формате даты, которую я давал. Это должно быть YYYYMMDD, и я давал MMDDYYYY. Я изменил его, и это сработало. – brokenfoot