select id,status
from request
上述查询的状态列返回一些整数值。我需要设置一个条件来返回一些字符串值而不是整数值。
例如:如果状态为 1,那么它应该返回“New”,或者如果状态是 2,那么它应该返回“Approved”。
select id,status
from request
上述查询的状态列返回一些整数值。我需要设置一个条件来返回一些字符串值而不是整数值。
例如:如果状态为 1,那么它应该返回“New”,或者如果状态是 2,那么它应该返回“Approved”。
使用 case 语句:
select
id,
case status
when 1 then 'New'
when 2 then 'Approved'
end as status
from
request
虽然我建议您有一个查找表,其中包含状态值的数字和相应的文本字符串。
select
req.id,
stat.value as status
from
request as req inner join status as stat
on req.status = stat.id
你可以使用CASE
它
select id,
case status
when 1 then 'New'
when 2 then 'Approved'
end as statusText
from request
select id, case when status = 1 then 'NEW' when status = 2 then 'Approved' else 'Undefined' end as status
from request
我鄙视存储在表中的神秘整数值,不知道它们的含义。
我的解决方案需要做更多的工作,但从长远来看这是值得的。
首先创建一个新的 StatusValues 表:
StatusValues
------------
Status INT PRIMARY KEY
StatusValue VARCHAR(20)
填充该表:
Status StatusValue
------ -----------
1 New
2 Approved
创建从 Request 表到该表的外键关系:
ALTER TABLE request
ADD CONSTRAINT FK_Request_StatusValues FOREIGN KEY (status)
REFERENCES StatusValues (status);
最后,编写查询:
SELECT r.id, sv.StatusValue
FROM request r
INNER JOIN StatusValues sv
ON r.status = sv.status;
以前神秘的request.status
列现在在数据库中得到了很好的记录和管理。
我不确定 SQL Server 的确切语法...
但这里是您可以用于 mySQL 的语法(一个变体应该适合您):
注意:这假设只有两个选择 - 如果有更多选择,请使用 case 关键字。
select id, if(status = 1, "New", "Approved) from request