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

Dhw*_*ani 2 sql oracle plsql

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

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

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

Ger*_*rat 5

我用的是解码:

select decode(gender,0,'Male','Female') from your_table;
Run Code Online (Sandbox Code Playgroud)


Daz*_*zaL 5

除了其他人已经显示的case/decode之外,在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
Run Code Online (Sandbox Code Playgroud)

如果您愿意,也可以索引虚拟列.