-1

2 つの日付列がdateAありdateBます。( )dateAから減算すると、間違った結果が得られますが、関数は使用されません。以下のクエリではなく、データを含むテーブルで使用すると、直接減算から間違った結果が得られます。dateBdateB - dateADATEDIFF(dateB,dateA)

SELECT DATE('2013-01-31') - DATE('2013-01-27')

なんで?

編集:

MySQL では、2 つの日付が 1 か月以内の場合、直接減算で正しい結果が得られますが、日付が 1 か月、1 年にまたがる場合、問題が発生する可能性があることがわかりました。

私は正しいですか?

4

2 に答える 2

0

列は日付または Varchars として定義されていますか? 文字列としての日付は何の意味もないからです。を実行するDATE('2013-01-31')と、日付オブジェクトが作成されるため、減算が機能します。したがって、列が Varchar として定義されている場合は、DATE(dateB) - DATE(dateA).

于 2013-06-21T03:23:37.520 に答える
0

おそらく、列は日付としてではなく、文字列として保存されます。それらが日付として格納されている場合、減算は期待どおりに機能します。

次のように、2 つの文字列を減算すると、次のようになります。

SELECT '2013-01-31' - '2013-01-27'

次に、MySQL は先頭の数字に基づいてそれらを数値に変換します。この場合、どちらも数字で始まるため、両方とも(先頭に数字がない場合、値は になります)2013に変換されます。次に、これらの数値が差し引かれます。20130

于 2013-06-21T03:26:45.003 に答える