CAST内CASE语句上的MariaDB / Mysql SELECT导致错误

问题描述 投票:0回答:1

我正在使用令人沮丧的数据集,其中包含我的用户表中“活动”列的null,0、1和2值。

为什么这样做:

SELECT u.id                                            AS LegacyContactKey,
       u.first_name                                    AS FirstName,
       u.last_name                                     AS LastName,
       c.company_name                                  AS CompanyName,
       u.email                                         AS EmailAddress,
       (CASE WHEN u.active = 1 THEN 1 WHEN u.active = 2 THEN 1 ELSE 0 END) as IsMember
FROM tb_users AS u
    INNER JOIN tb_company AS c ON u.company_id = c.company_id

但是不是吗?

SELECT u.id                                            AS LegacyContactKey,
       u.first_name                                    AS FirstName,
       u.last_name                                     AS LastName,
       c.company_name                                  AS CompanyName,
       u.email                                         AS EmailAddress,
       CAST((CASE WHEN u.active = 1 THEN 1 WHEN u.active = 2 THEN 1 ELSE 0 END) AS BOOLEAN) as IsMember
FROM tb_users AS u
    INNER JOIN tb_company AS c ON u.company_id = c.company_id

我想将查询结果之一转换为布尔值,因此它返回true或false,但是当我添加CAST()时,我得到一个错误(在BOOLEAN附近)

正在运行MariaDB 10.3

mysql sql casting mariadb-10.3
1个回答
1
投票

我不认为cast()支持布尔值。但是最简单的方法实际上是:

   (u.active IN (1, 2)) as IsMember

您可以仅使用布尔表达式并为其指定列别名。

编辑:

如果NULL是一个问题,只需将其包括在表达式中:

   (u.active IN (1, 2) AND u.active IS NOT NULL) as IsMember
© www.soinside.com 2019 - 2024. All rights reserved.