当我们使用SELECT语句时,SQL查询可以用特定值(我们动态定义)替换布尔值吗?

时间:2012-12-31 17:11:41

标签: sql oracle plsql

我只是有一个奇怪的问题。我知道这可能很有趣,但我对这个有好奇心。 这是我的问题:

假设数据库中有一个名为“gender”的列具有布尔值,即0或1. 0 =男性,1 =女性。 现在,当我们显示具有此类字段的表单的数据时,我们必须执行代码(gender=0)?Male:Female.

现在我只想知道sql是否提供了任何方式,在生成记录集时自动将所有性别值自动替换为男性或女性。即不需要这一行代码?

5 个答案:

答案 0 :(得分:5)

我使用decode

select decode(gender,0,'Male','Female') from your_table;

答案 1 :(得分:5)

除了其他人已经展示的案例/解码之外,在11gR1以后我们可以有一个虚拟列。

SQL> create table test(name varchar2(20), gender number(1));

Table created.

SQL> insert into test values ('Paul', 0);

1 row created.

SQL> insert into test values ('Vicky', 1);

1 row created.

SQL> commit;

Commit complete.

SQL> alter table test add (gender_str varchar2(6) generated always as (case gender when 0 then 'Male' when 1 then 'Female' end));

Table altered.

SQL> select * from test;

NAME                                         GENDER GENDER
-------------------- ------------------------------ ------
Paul                                              0 Male
Vicky                                             1 Female

如果您愿意,也可以为虚拟列编制索引。

答案 2 :(得分:4)

您可以使用case语句,如下所示:

select
 case gender when 0 then 'Male' when 1 then 'Female' end
from
 ...

如果性别既不是0也不是1,那么您将在该列中获得空值。

答案 3 :(得分:2)

你也可以考虑将这个逻辑编成Virtual column,因为他们在Oracle中称之为。 SQL Server人员会将它们称为计算列。

这种方法的优点是现有的逻辑将继续写入您的性别字段(因此不需要重写),但新的应用程序可以从genderEnglishName字段中提取。

我认为“正确”的答案是遵守性别标准,ISO 5218。我会将性别字段保留为整数,指定正确的翻译并将解释逻辑保留到表示层,以防您需要使用internationalization

答案 4 :(得分:1)

您可以使用CASE WHEN分配自己的值:)

Case when column = true 
then myvalue 
else true End

查看您的确切查询值:我认为只有0和1,因此您只需一个When :))

-- your code
Case when Gender = 0 
Then 'Male'
Else 'Female'
End 
-- rest of your code