私のMySQLクエリのかなりの数で、計算の一部があります
(CAST(return_item as SIGNED)*2-1)
基本的に、そのコードは と を変換true => 1
しfalse => -1
、うまく機能します! 私が気に入らないのは、SQL ステートメントでの読みやすさです。
このステートメントを記述して、その意図をより明確にするよりクリーンな方法はありますか?
return_item
これはBIT(1)
、システム内のブール値を表します。
私のMySQLクエリのかなりの数で、計算の一部があります
(CAST(return_item as SIGNED)*2-1)
基本的に、そのコードは と を変換true => 1
しfalse => -1
、うまく機能します! 私が気に入らないのは、SQL ステートメントでの読みやすさです。
このステートメントを記述して、その意図をより明確にするよりクリーンな方法はありますか?
return_item
これはBIT(1)
、システム内のブール値を表します。
意図を明確にしたい場合は、条件を使用するよりも良い方法はほとんどありません。
IF(return_item, 1, -1)
これを行う最も標準的な SQL の方法は、次のCASE
ステートメントです。
CASE return_item WHEN 1 THEN 1 ELSE -1 END
これは非常に読みやすく、他のデータベース製品のユーザーにもなじみます。
問題の型はブール値として使用できるため、これも機能しますが、移植性は低くなります (Postgres のboolean
型は機能しますが、MS SQL Server の型は機能しbit
ません)。
CASE WHEN return_item THEN 1 ELSE -1 END
これを試して:
if(return_item=true, 1, -1)