SQL如何替换选择返回的值?

Posted

技术标签:

【中文标题】SQL如何替换选择返回的值?【英文标题】:SQL How to replace values of select return? 【发布时间】: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 之间存在差异。 谢谢!下次我会记住的! 【参考方案1】:

您有多种选择:

    加入具有TRUEFALSE 布尔值值的域表。

    使用 (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)

【讨论】:

你必须说出你的答案有效的原因!

以上是关于SQL如何替换选择返回的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 R 会话中的值替换为 SQL 绑定变量占位符?

如何使用SQL语句,实现多条件分组统计

如何从 SQL Server 中包含多行数据的 2 个表中选择 4 个不同的值?

如何从 T-SQL 存储过程返回表

如何在列表和标签中插入动态 SQL?

求SQL语句,一个字段中多个ID,如何对他进行对应的值替换?