Sql 如何替换select中列中的所有非零值?
我需要替换select语句中列中的非零Sql 如何替换select中列中的所有非零值?,sql,Sql,我需要替换select语句中列中的非零 SELECT Status, Name, Car from Events; 我可以这样做: SELECT (Replace(Status, '1', 'Ready'), Name, Car from Events; Status Name Car 0 John Porsche 1 Bill Dodge 5 Megan Ford 或者使用Case/Update 但我有
SELECT Status, Name, Car from Events;
我可以这样做:
SELECT (Replace(Status, '1', 'Ready'), Name, Car from Events;
Status Name Car
0 John Porsche
1 Bill Dodge
5 Megan Ford
或者使用Case/Update
但我有从-5到10的数字,为每一个案例写替换或其他东西不是个好主意
如何在不更新数据库的情况下添加与替换的比较
表如下所示:
SELECT (Replace(Status, '1', 'Ready'), Name, Car from Events;
Status Name Car
0 John Porsche
1 Bill Dodge
5 Megan Ford
标准方法是使用
案例
:
select t.*,
(case when status = 1 then 'Ready'
else 'Something else'
end) as status_string
from t;
不过,我建议您使用一个状态参考表:
create table statuses (
status int primary key,
name varchar(255)
);
insert into statuses (status, name)
values (0, 'UNKNOWN'),
(1, 'READY'),
. . . -- for the rest of the statuses
然后使用JOIN
:
select t.*, s.name
from t join
statuses s
on t.status = s.status;
在这种情况下,您的预期输出是什么?如果您准备好使用
-5
?您可以编写一个函数,并在该函数中编写case语句,映射您需要的值,以返回状态列的非零值,只需在选择查询中调用您使用的产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称,字符串函数通常与供应商高度相关。请为正在使用的数据库产品添加一个。如果状态列为空,请添加任何空值?预期结果?对未指定dbms的问题的特定于产品的答案。至少告诉我们这是针对哪个dbms的。标记是针对ANSI SQL的,如果不是在ANSI SQL中。