このエラーが発生します
操作の照合の不正な組み合わせ<=
次のWHERE句の場合:
time(table1.dt1)<=date_add(table1.tim,interval 60 second)
dt1 = datetime
、tim = time
誰もが理由を知っていますか?
このエラーが発生します
操作の照合の不正な組み合わせ<=
次のWHERE句の場合:
time(table1.dt1)<=date_add(table1.tim,interval 60 second)
dt1 = datetime
、tim = time
誰もが理由を知っていますか?
のマニュアルエントリで説明されているようにDATE_ADD()
:
戻り値は引数によって異なります。
あなたの場合、table1.tim
はTIME
値であるため、関数は文字列を返します。
character_set_connection
文字列は、とで指定された文字セットと照合で返されますcollation_connection
。
のマニュアルエントリで説明されているようにTIME()
:
時間または日時式の時間部分を抽出し
expr
、文字列として返します。
文字列はバイナリ文字列として返されます(接続文字セットを使用しないのはなぜですか?照合は私を超えています-おそらくバグですか?)。
式評価での型変換のマニュアルエントリで説明されているように:
比較操作の両方の引数が文字列の場合、それらは文字列として比較されます。
したがって、実行される比較は文字列の比較ですが、文字列を比較binary
に適した照合に強制することはできません(エンコードが不明であるため)。したがって、あなたが目撃しているエラー。
オペランドの一方または両方を明示的にキャストすることで、比較を強制的に正しく実行することもできますが、TIME
型との比較から暗黙的に変換が行われるように、句を作り直したくなるでしょう。
TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.tim