私はここに新しいので、親切にしてください。次のシナリオがあります。
簡単にするために、MySQLデータベースのビューに表されている多くのテーブルがあります。私の問題は、このビューで、ある種類のイベントか別のイベント(単純なブール値)かを表す値が必要なことです。
`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`
結果はintとして表されるため、Entity Frameworkによって読み取られます。問題は、ブール値の戻り値が本当に必要であることです。
CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent`
これにより、MySQL Workbenchに表示されないエラーが発生しました(「...にエラーがあります...」と表示されるだけです)。
助けてくれませんか?
私のアプリケーションでそれを解決しようとしましたが、後で他のソフトウェアで使用されるので、データベースで解決するのが本当に好ましいです。
IF関数: を使用してみてください
SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, TRUE, FALSE)
FROM ...
または
SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 1, 0)
FROM ...
IF機能がなくても、
mysql> select ('rolando' = 'rolando') str_compare;
+-------------+
| str_compare |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
mysql>
mysqlクライアントを使用して0または1を生成する
問題はこれです:CAST() =および CONVERT()は、次のタイプのみを受け入れて返すことができます:
BOOLEANはこのリストにないため、CASTまたはCONVERTから返すことはできません
IF関数を使用して文字列を生成できます
SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 'TRUE', 'FALSE')
FROM ...
冗長なIF()ステートメントを使用せずに、非常に簡単な方法で実行できます。
... `YourField` IS NOT NULL AS `YourField` ...
また、古典的なブール型強制を試すこともできます。
SELECT NOT NOT(whatever);
これの良い点は、それがNULLを自然に保存することですが、ここでの答えのほとんどは保存しません。
NULLをFALSEに強制したい場合は、
SELECT IFNULL(NOT NOT(whatever)、FALSE);
これは現在不可能です。
BOOLEAN
タイプ(または実際の配列タイプ..または実際のJSONタイプ)はありません。 TINYINT
のエイリアスがあります。'true' IS TRUE
と1=1
はどちらも1
をint
として返します。TINYINT
形式を提供しません。私が知る限り、型を降格することも、SELECT
でtinyintを生成することもできません。
非常に PostgreSQLへの移行を提案します。それはそれほど恐ろしいことではありません...そして解放されます。
Mysql関数CAST_TO_BITを使用します
例:
SELECT CAST_TO_BIT(1);
Mysql:SELECT CAST_TO_BIT(0); -> jdbcドライバー->Java:ブールfalse;
Mysql:SELECT CAST_TO_BIT(1); -> jdbcドライバー->Java:ブールtrue;
Mysql:SELECT CAST_TO_BIT(NULL); -> jdbcドライバー->Java:[〜#〜] null [〜#〜];
「CASE」も使用できます。
SELECT CASE WHEN yourField=testValue THEN 'TRUE' ELSE 'FALSE' END as boolFieldName
CAST(IF(col_name = 1, 'true', 'false') AS JSON)
は、一部のユースケースで機能する場合があります。
MySQL 5.7.8以降では、RFC 7159で定義されているネイティブJSONデータ型がサポートされています。私のユースケースでは、常に0または1のINT
列がありましたが、出力はbool true
またはfalse
ではなく、文字列 "正しいか間違っているか"。
https://dev.mysql.com/doc/refman/5.7/en/json.html#json-converting-between-types