sql - 当我们使用 SELECT 语句时,SQL 查询可以用特定值(如我们动态定义的那样)替换 bool 值吗?

标签 sql oracle plsql

我有个奇怪的问题。我知道这可能很有趣,但我只是对此感到好奇。 这是我的详细问题:

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

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

最佳答案

除了其他人展示的 case/decode 之外,在 11gR1 之后我们可以有一个虚拟 Column。

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

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

关于sql - 当我们使用 SELECT 语句时,SQL 查询可以用特定值(如我们动态定义的那样)替换 bool 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14104241/

相关文章:

oracle - 如何让 "Microsoft ODBC for Oracle"驱动程序在 Windows 7 中工作

oracle - 使用查询删除 Oracle 连接

sql - 在 Oracle 中,[select * from table()] 是什么意思?

mysql - 两个不同表的主键与外键相同

mysql - 在庞大的数据集上使用 IN 是个好主意吗?

php - 如何在mysql中存储顺序数据

mysql - SSRS 报告表上的分组值

sql - Oracle SQL 优化器在处理 OR 和与行无关的谓词时的行为(例如,无论行如何,函数都返回相同的值)

variables - PL/SQL 中 DECLARE、VARIABLE 和 DEFINE 的区别

oracle - 立即执行多个更新