【问题标题】:MYSQL - Replace 0 with a string and non 0 with another string in SQL query output, without ConditionalsMYSQL - 在 SQL 查询输出中用字符串替换 0,用另一个字符串替换非 0,没有条件
【发布时间】:2017-09-23 05:37:13
【问题描述】:

我有一个这样开头的复杂字符串:SELECT COUNT(*) AS 'columnName' ...。结果将显示一个正数或 0 数。我想要的是,如果它是 0,我希望它打印 string1(而不是 0),如果它高于 0,我希望它打印 string2(而不是那个数字)。需要注意的是我不想使用条件语句,没有ifs 或cases。我一直在考虑替换功能,但我认为它不起作用。在那之后,也许一个 VIEW(存储结果的虚拟表?)会起作用吗?我不想以任何方式更改任何原始表数据,我只想操纵输出。我想不通,我是一个SQL初学者。帮忙?

【问题讨论】:

  • 如果你是初学者,你应该使用CASE。这是正确的做法。此外,`count(*) 几乎从不返回 0。
  • 我会说将您的计数转换为 varchar 然后应用替换如果真的想要替换

标签: mysql sql replace


【解决方案1】:

正确的做法是使用CASE,但还有其他方式:

select elt(1 + least(count(*), 1), 'string1', 'string2')

count(*) 几乎从不返回0。它仅在没有group by 并且表没有行(或所有行都已被where 过滤掉)时返回0

【讨论】:

    【解决方案2】:
    select COALESCE((select  'string1' as s
                      from table1
                       having count(*) < 0 )
                     ,'string2')
    

    如果表中没有记录,上述查询返回字符串 1,否则返回字符串 2

    【讨论】:

    • 这不是对一个完全有效的答案的批评,但事实上这是你想要的,这似乎是问题的前提存在缺陷。 @RestlessC0bra,您似乎没有意识到这与SELECT CASE WHEN (SELECT 1 AS s FROM table1 HAVING COUNT(*) &lt; 0 ) IS NOT NULL THEN 'string1' ELSE 'string2' END;(或任何数量的类似结构)精确地相同。没有理由避免使用条件表达式,因为它们在逻辑上是有效的并且通常更直观,例如 SELECT IF(EXISTS(SELECT * FROM table1),'string1','string2');
    猜你喜欢
    • 2021-11-30
    • 2018-04-29
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2013-12-03
    • 2017-01-28
    • 2017-03-07
    相关资源
    最近更新 更多