【问题标题】:SQL How to replace values of select return?SQL如何替换选择返回的值?
【发布时间】:2013-05-21 03:02:10
【问题描述】:

在我的数据库 (MySQL) 表中,有一列带有 10 分别代表 truefalse

但在 SELECT 中,我需要它替换 truefalse 以在 GridView 中打印。

如何让我的SELECT 查询来做到这一点?

在我当前的表中:

 id   |  name    |  hide
  1   |  Paul    |  1
  2   |  John    |  0
  3   |  Jessica |  1

我需要它显示:

  id  |  name    |  hide
  1   |  Paul    |  true
  2   |  John    |  false
  3   |  Jessica |  true

【问题讨论】:

  • 请记住,表是有名称的——我们可以为您发明名称,但如果您告诉我们表的名称,答案会更加一致。指定您使用的 DBMS 也是一个好主意,因为不同的 DBMS 之间存在差异。
  • 谢谢!下次我会记住的!

标签: mysql sql select


【解决方案1】:

您有多种选择:

  1. 加入具有TRUEFALSE 布尔值值的域表。
  2. 使用 (as pointed in this answer)

    SELECT CASE WHEN hide = 0 THEN FALSE ELSE TRUE END FROM
    

    或者如果 Boolean 不受支持:

    SELECT CASE WHEN hide = 0 THEN 'false' ELSE 'true' END FROM
    

【讨论】:

    【解决方案2】:

    我找到了解决办法

       SELECT 
       CASE status
          WHEN 'VS' THEN 'validated by subsidiary'
          WHEN 'NA' THEN 'not acceptable'
          WHEN 'D'  THEN 'delisted'
          ELSE 'validated'
       END AS STATUS
       FROM SUPP_STATUS
    

    这是使用 CASE 这是另一个操作两个以上选项的选定值。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      SELECT id,name, REPLACE(REPLACE(hide,0,"false"),1,"true") AS hide FROM your-table
      

      希望对你有帮助。

      【讨论】:

      • 虽然它在给定 REPLACE 功能(哪个 DBMS 有这个功能?)的情况下工作,但双重应用程序并不是那么优雅,并且不能很好地扩展到 3 个或更多案例,是吗?不过,这是一个替代答案。
      • 我刚刚用 MySQL 尝试过,如果你有超过 3 个案例,你是对的,这不是很好的方法,但在这种情况下,这个解决方案就像你提到的那样工作。 :) 感谢您的评论
      • 我实际上喜欢这种方法用于 2 个不同的值,并且在 select 语句中比 CASE/WHEN 块更容易查看。
      • 虽然这可行,但它是一个 hack。 Replace 是一种字符串替换工具。假设发生了一些变化,字符串“01”而不是 1。这将被转换为“falsetrue”。最好对整个变量进行一些显式匹配。
      【解决方案4】:

      如果您希望将列作为字符串值,则:

      SELECT id, name, CASE WHEN hide = 0 THEN 'false' ELSE 'true' END AS hide
        FROM anonymous_table
      

      如果 DBMS 支持 BOOLEAN,您可以改用:

      SELECT id, name, CASE WHEN hide = 0 THEN false ELSE true END AS hide
        FROM anonymous_table
      

      除了名称 falsetrue 周围的引号被删除之外,其余相同。

      【讨论】:

      • Mysql 5.7.19-0ubuntu0.16.04.1 - 为了让As hide 工作,我必须在CASE ... END 周围加上括号。所以:SELECT id, name, (CASE WHEN ... END) AS hide FROM ...
      【解决方案5】:

      您可以在 select 子句中使用强制转换,例如:

      SELECT id, name, CAST(hide AS BOOLEAN) FROM table_name;
      

      【讨论】:

        【解决方案6】:

        我说 case 语句是错误的,但这可能是一个很好的解决方案。 如果您选择使用CASE 语句,则必须确保至少匹配CASE 条件之一。否则,您需要定义一个错误处理程序来捕获错误。请记住,您不必对 IF 语句执行此操作。

        SELECT if(hide = 0,FALSE,TRUE) col FROM tbl; #for BOOLEAN Value return
        

        SELECT if(hide = 0,'FALSE','TRUE') col FROM tbl; #for string Value return
        

        【讨论】:

          【解决方案7】:

          在 Postgres 11 中我必须这样做:

          type 是一个int

          SELECT type,
          CASE 
              WHEN type = 1 THEN 'todo'
              ELSE 'event'
          END as type_s
          from calendar_items;
          

          【讨论】:

            【解决方案8】:

            替换select语句本身的值...

            (CASE WHEN Mobile LIKE '966%' THEN (select REPLACE(CAST(Mobile AS nvarchar(MAX)),'966','0')) ELSE Mobile END)

            【讨论】:

            • 你必须说出你的答案有效的原因!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-22
            • 2015-03-28
            • 2018-09-03
            相关资源
            最近更新 更多