テーブルに3つの列があります
Column names with datatypes
First_week - Number
Days - Number
Second_week- Number
Column Values
8
6
11
結果が8/6/11を返すようにこれらの値を連結したい列の値のいずれかがnullの場合、連結は8 /-/11である必要がありますすべてがnullの場合、結果は-/-/-である必要がありますオラクルクエリで達成できますか?
decode
これを実現するには、nvl
関数またはcase
式を使用できます。使用例を次に示しdecode
ます。
with your_table(First_week, Days, Second_week) as(
select 8, 6, 11 from dual union all
select 5, null, 12 from dual union all
select null, 7, null from dual union all
select null, null, null from dual
)
select decode(to_char(First_week), null, '-', to_char(First_week)) || '/' ||
decode(to_char(Days), null, '-', to_char(Days)) || '/' ||
decode(to_char(Second_week), null, '-', to_char(Second_week)) as result
from your_table
RESULT
---------
8/6/11
5/-/12
-/7/-
-/-/-
http://www.techonthenet.com/oracle/functions/coalesce.php
「Oracle/PLSQL では、合体関数はリスト内の最初の非 null 式を返します。すべての式が null に評価される場合、合体関数は null を返します。」
http://docs.oracle.com/cd/B19306_01/server.102/b14200/operators003.htm#i997789
"|| 文字列と CLOB データを連結します。"
これで、次のようなものを書くためのすべての構成要素ができました。
COALESCE(First_week, '-') || '/' || COALESCE(日, '-') || '/' || COALESCE(Second_week, '-')
これはどうですか
SELECT NVL (TO_CHAR (FIRST_WEEK), '-')
|| '/'
|| NVL (TO_CHAR (DAYS), '-')
|| '/'
|| NVL (TO_CHAR (SECOND_WEEK), '-')
FROM YOUR_TABLE