2016-04-19 22 views
0

私は3つのアスタリスクでcase文の左右に貼り付けようとしています。これは実行されますが、値はNull値には表示されません。何か案は?CASE文のLPADとRPAD

SELECT p.patientfirstname || ' ' || p.patientlastname AS "Patient" 
,CASE WHEN i.insuranceid IS NULL THEN RPAD(LPAD('No insurance', 3, '*'), 3, '*') 
ELSE i.insurancename 
END "Insurance Name" 
FROM patient p 
FULL OUTER JOIN insurance i ON (p.insuranceid = i.insuranceid); 
+0

変更 'RPAD(LPAD(」 RPAD(LPAD( '保険なし'、15、 '*')、18、 '*') 'に表示したい場合は、「保険」、「3」、「*」) ***保険はありません*** –

+0

なぜでしょう? 'COALESCE(i.insuran cename、 '***保険なし') '?また、パッド機能は、使用している方法では機能しません。あなたは、サイズ3の文字列が返されるようにすると言っています。 http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_functions_2017.htm –

+0

「***保険はありません」が表示されるようにするには、パディングを停止して ''* **保険なし*** ' – Spade

答えて

0

私は私のコメントで書いたように、あなたが文字列定数をしたい場合は、1つだけ使用し、パディングを廃止:作業するとき

SELECT p.patientfirstname || ' ' || p.patientlastname AS "Patient" 
,CASE WHEN i.insuranceid IS NULL THEN '***No insurance***' 
ELSE i.insurancename 
END "Insurance Name" 
FROM patient p 
FULL OUTER JOIN insurance i ON (p.insuranceid = i.insuranceid); 

パディングは固定サイズの文字列を確実にするために使用されます可変長の短い文字列を変換します。例を参照してください:

select lpad('Hola',7, '*'), lpad('Namaste',7, '*'), lpad('Hello',7, '*') from dual; 

***はいはい|ナマステ| **こんにちは

select length(lpad('Hola',7, '*')), length(lpad('Namaste',7, '*')), length(lpad('Hello',7, '*')) from dual; 

7 | 7 | 7