如何在 MySQL SELECT 子句中将整数转换为布尔值?

Bru*_*uno 35 mysql datatypes select

我是新来的,所以请善待我。我有以下场景:

我有很多表,为了简单起见,它们在我的 MySQL 数据库的视图中表示。我的问题是我需要在这个视图中使用一个值来表示它是一种事件还是另一种事件(一个简单的布尔值),我试图通过以下方式实现:

`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`
Run Code Online (Sandbox Code Playgroud)

结果表示为 int,因此由实体框架读取。问题是我真的需要一个布尔返回值,我试图通过以下方式实现:

CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent` 
Run Code Online (Sandbox Code Playgroud)

这导致了一个错误,这个错误没有在 MySQL Workbench 中显示给我(我只收到烦人的“你有一个错误......”)。

你们能帮我吗?

试图在我的应用程序中解决它,但我真的更喜欢在数据库中解决这个问题,因为它以后会被其他软件使用。

Rol*_*DBA 36

尝试使用IF 函数:

SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, TRUE, FALSE) 
FROM ...
Run Code Online (Sandbox Code Playgroud)

或者

SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 1, 0) 
FROM ...
Run Code Online (Sandbox Code Playgroud)

即使没有 IF 功能,运行

mysql> select ('rolando' = 'rolando') str_compare;
+-------------+
| str_compare |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

使用 mysql 客户端产生 0 或 1

问题是: CAST()CONVERT() 只能接受和返回以下类型

  • 二进制[(N)]
  • 字符[(N)]
  • 日期
  • 约会时间
  • 十进制[(M[,D])]
  • 签名 [整数]
  • 时间
  • 无符号 [整数]

由于 BOOLEAN 不在此列表中,因此 CAST 或 CONVERT 永远不会返回它

您可以使用 IF 函数生成字符串

SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 'TRUE', 'FALSE') 
FROM ...
Run Code Online (Sandbox Code Playgroud)

  • 布尔值是“tinyint”的别名。在任何情况下,“IF”都不会返回“tinyint”,所以我看不出这个答案是如何正确或被接受的。 (2认同)

Rom*_*aza 15

您可以通过非常简单的方式完成,而无需使用多余的 IF() 语句:

... `YourField` IS NOT NULL AS `YourField` ...
Run Code Online (Sandbox Code Playgroud)


小智 6

您还可以尝试经典的布尔强制转换:

选择不不(无论如何);

这样做的好处是它自然会保留 NULL,而这里的大多数答案都没有。

如果要将 NULL 强制为 FALSE,则执行

SELECT IFNULL(NOT NOT (whatever), FALSE);

  • 我想知道,这如何实现将整数转换为布尔值? (2认同)