8

次のステートメントを実行すると、MySQL が混乱しているように見えます。

select now(), if(false, date(now()), time(now()));

| 2013-07-24 10:06:21 | 2010-06-21 00:00:00 |

の 2 番目の引数をリテラル文字列に置き換えるifと、ステートメントは正しく動作します。

select now(), if(false, 'Banana', time(now()));

| 2013-07-24 10:06:21 | 10:06:21 |

これはバグですか、それとも本当に奇妙な癖ですか?

4

1 に答える 1

4

の戻り値の型IFは、両方の引数の型を含むデータ型でなければなりません。したがって、引数の 1 つが aDATEで、もう 1 つが a のTIME場合、 の型はIFになりますDATETIME

これは簡単な例のクエリでは必要ないように見えますが、次のようなものを検討してください。

SELECT IF(col1, date(col2), time(col2)) AS dt
FROM Table

dt特定のデータはその行の内容に依存しますが、結果のすべての行の列には同じデータ型が必要です。

日付または時刻だけが必要な場合は、文字列に変換します。

于 2013-07-24T08:32:00.867 に答える