SQL如何替换选择返回的值?
Posted
技术标签:
【中文标题】SQL如何替换选择返回的值?【英文标题】:SQL How to replace values of select return? 【发布时间】:2013-05-21 03:02:10 【问题描述】:在我的数据库 (mysql) 表中,有一列带有 1
和 0
分别代表 true
和 false
。
但在 SELECT
中,我需要它替换 true
或 false
以在 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】:您有多种选择:
-
加入具有
TRUE
、FALSE
布尔值值的域表。
使用 (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
除了名称 false
和 true
周围的引号被删除之外,其余相同。
【讨论】:
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如何替换选择返回的值?的主要内容,如果未能解决你的问题,请参考以下文章