Sql 如何替换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语句中列中的非零

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中。