web-dev-qa-db-ja.com

ネイティブ関数 'DATEDIFF'の呼び出しのパラメーター数が正しくありません

この行からエラーが出ます

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

私の列の日付はm-d-yyの形式です

これを別の形式に変換する必要がありますか?もしそうなら?

MariaDBの使用

17
Alex Borsody

MariaDBのドキュメントによると DATEDIFFtwo引数のみを受け取ります:

構文

DATEDIFF(expr1,expr2)

説明

DATEDIFF()は、ある日付から別の日付までの日数で表される(expr1 – expr2)を返します。 expr1およびexpr2は、日付または日付と時刻の式です。値の日付部分のみが計算に使用されます。

18
D Stanley

@alex_b DATEDIFF関数とTIMESTAMPDIFF関数の構文を混同することは非常に一般的な観察です。次の link は確かに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を「argument1」として使用
  • 既存のvarchar列を「argument2」として使用
  • sETコマンドを使用して列を更新する

SET output_date = DATEDIFF(CURDATE()、input_date)、...上記でうまくいきました。幸運を!

8
nitinr708