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


29

我是新来的,所以对我好一点。我有以下情况:

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

`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`

结果表示为int,因此由Entity Framework读取。问题是我确实需要一个布尔返回值,我试图通过以下方法实现:

CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent` 

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

你们能帮我吗?

试图在我的应用程序中解决它,但是我真的很想在数据库中解决这个问题,因为稍后它将被其他软件使用。

Answers:


26

尝试使用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() 只能接受并返回以下类型

  • BINARY [(N)]
  • 字符[(N)]
  • 日期
  • 约会时间
  • DECIMAL [(M [,D])]
  • 签名[INTEGER]
  • 时间
  • 未签名的[INTEGER]

由于BOOLEAN不在此列表中,因此CAST或CONVERT绝对不能将其返回

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

SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 'TRUE', 'FALSE') 
FROM ...

1
布尔值是的别名tinyint。在任何情况下都不会IF返回a,tinyint所以我看不到这个答案是正确的还是被接受的。
埃文·卡罗尔

@EvanCarroll我的回答是完全绕开CAST和CONVERT。使用IF函数可完成他的框架无法完成的工作,即将BOOLEAN识别为INT(4字节)而不是TINYINT(1字节)。在这种情况下,您应该责怪该框架不使用BOOLEAN值。
RolandoMySQLDBA


4

您也可以尝试经典的布尔强制:

选择不(不管);

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

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

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


1
我想知道,这如何实现将整数转换为布尔值?
ypercubeᵀᴹ

2

您还可以使用“ CASE”:

SELECT CASE WHEN yourField=testValue THEN 'TRUE' ELSE 'FALSE' END as boolFieldName


您应该将其强制转换为布尔值,如果不是,则为char字段。
McNets '17

但是,有时您查询的使用者想要一个字符
Eric Wilson

2

目前这是不可能的。

  • MySQL没有实BOOLEAN类型(或实数组类型..或实JSON类型)。它具有的别名TINYINT
  • 任何条件都将返回整数。这是CPU最快的数据类型,大概此实现细节已在此处反映。例如,'true' IS TRUE1=1都返回1作为int
  • CAST不提供TINYINT格式。

据我所知,您既不能降级类型,也不能在a中产生tinyint SELECT

强烈建议迁移到PostgreSQL。它是如此的可怕……解放了。


2

使用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 ;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.