2

奇妙な質問があります。私はそれが面白いかもしれないことを知っていますが、私はこれについて好奇心を持っています. これが私の質問の詳細です:

ブール値、つまり 0 または 1 を持つ「性別」という名前のデータベースに列があるとします。0=男性、1=女性です。このタイプのフィールドを持つフォームのデータを表示するには、次のコードを実行する必要があります。(gender=0)?Male:Female.

ここで、sql が何らかの方法を提供するかどうかを知りたいだけです。レコードセットが生成されると、すべての性別の値が自動的に男性または女性に置き換えられます。つまり、この1行のコードは必要ありませんか?

4

5 に答える 5

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

必要に応じて、仮想列にもインデックスを付けることができます。

于 2012-12-31T17:21:40.593 に答える
5

私はデコードを使用します:

select decode(gender,0,'Male','Female') from your_table;
于 2012-12-31T17:14:54.550 に答える
4

case次のようなステートメントを使用できます。

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

性別が 0 でも 1 でもない場合、その列は null になります。

于 2012-12-31T17:14:07.893 に答える
2

このロジックをOracle で呼び出すように、仮想列にコード化することも検討できます。SQL Server の関係者は、それらを計算列として認識しています。

このアプローチの利点は、既存のロジックが引き続き性別フィールドに書き込みます (したがって、書き直す必要はありません) が、新しいアプリはgenderEnglishNameフィールドからプルできることです。

私の心の中での「正しい」答えは、性別の基準であるISO 5218に従うことです。性別フィールドを整数として保持し、正しい翻訳を割り当て、国際化を扱う必要がある場合に備えて、解釈ロジックをプレゼンテーション層に任せます。

于 2012-12-31T17:23:40.113 に答える
1

あなたはあなた自身の価値を評価するために使うことができCASE WHENます:)

Case when column = true 
then myvalue 
else true End

正確なクエリ値を見てください:そして、0と1しかないと思うので、必要なのは1つWhenだけです:))

-- your code
Case when Gender = 0 
Then 'Male'
Else 'Female'
End 
-- rest of your code
于 2012-12-31T17:13:37.980 に答える