2

私のMySQLクエリのかなりの数で、計算の一部があります

(CAST(return_item as SIGNED)*2-1)

基本的に、そのコードは と を変換true => 1false => -1、うまく機能します! 私が気に入らないのは、SQL ステートメントでの読みやすさです。

このステートメントを記述して、その意図をより明確にするよりクリーンな方法はありますか?

return_itemこれはBIT(1)、システム内のブール値を表します。

4

4 に答える 4

3

意図を明確にしたい場合は、条件を使用するよりも良い方法はほとんどありません。

IF(return_item, 1, -1)
于 2013-10-09T17:08:03.520 に答える
2

これを行う最も標準的な 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
于 2013-10-09T17:09:49.143 に答える
1

これを試して:

if(return_item=true, 1, -1)
于 2013-10-09T17:08:46.730 に答える