【问题标题】:MariaDB/Mysql SELECT on CASE Statement inside CAST causes an errorCAST 中的 CASE 语句上的 MariaDB/Mysql SELECT 导致错误
【发布时间】:2020-02-14 21:53:30
【问题描述】:

我正在处理一组令人沮丧的数据,其中包含我的 users 表中“活动”列的 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】:

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

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

    您可以只使用布尔表达式并为其分配列别名。

    编辑:

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

       (u.active IN (1, 2) AND u.active IS NOT NULL) as IsMember
    

    【讨论】:

    • 如果u.active 已经是NULL,这会给你NULL。请改用(CASE WHEN u.active IN (1, 2) THEN TRUE ELSE FALSE END)COALESCE(u.active IN (1, 2), FALSE)
    • 这有效,但不返回“true”或“false”。我希望在查询中返回 true 或 false,因为我正在为 0,1 不起作用的请求做准备。我想这没什么大不了的,因为我仍然可以在查询之外进行转换。
    • @ChrisStage 。 . .如果需要字符串值,可以转换为字符串。
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2015-01-11
    • 2023-04-07
    相关资源
    最近更新 更多