Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我们使用SELECT语句时,SQL查询可以用特定的值(如我们动态定义的)替换布尔值吗?_Sql_Oracle_Plsql - Fatal编程技术网

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

当我们使用SELECT语句时,SQL查询可以用特定的值(如我们动态定义的)替换布尔值吗?,sql,oracle,plsql,Sql,Oracle,Plsql,我只是有个奇怪的问题。我知道这可能很有趣,但我只是好奇而已。 以下是我的详细问题: 假设数据库中有一个名为“gender”的列具有布尔值,即0或1。0=男性,1=女性。 现在,当我们显示具有此类字段的表单的数据时,我们必须进行编码,即(性别=0)?男:女。 现在我只想知道sql是否提供了任何方法,当一个记录集生成时,所有的性别值都会自动替换为男性或女性。i、 e.不需要这一行代码?您可以在分配自己的值时使用案例:) 查看您的精确查询值:我相信只有0和1,所以您只需要一个,当:)时 您可以使用一个

我只是有个奇怪的问题。我知道这可能很有趣,但我只是好奇而已。 以下是我的详细问题:

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


现在我只想知道sql是否提供了任何方法,当一个记录集生成时,所有的性别值都会自动替换为男性或女性。i、 e.不需要这一行代码?

您可以在分配自己的值时使用
案例:)

查看您的精确查询值:我相信只有0和1,所以您只需要一个
,当
:)时


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

select
 case gender when 0 then 'Male' when 1 then 'Female' end
from
 ...
如果性别既不是0也不是1,则该列中会出现null。

我将使用:


除了其他人展示的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

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

您还可以考虑将此逻辑编码为Oracle中所称的逻辑。SQL Server人员将它们称为计算列

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


我心目中的“正确”答案是遵守性的标准。我会将性别字段保留为一个整数,分配正确的翻译,并将解释逻辑留给表示层,以备您需要使用。

看看这条语句。只想提到DECODE是一个函数,其中case是SQL标准的一部分,因此DECODE不是供应商不可知的,而该案例与供应商无关。OP指定了Oracle,因此任何一个都可以为他工作,但对于可能看到这一点的其他人来说,如果跨供应商支持是一个问题,则使用用例代替。
select
 case gender when 0 then 'Male' when 1 then 'Female' end
from
 ...
select decode(gender,0,'Male','Female') from your_table;
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