Oracle查询解析列值连接

时间:2013-01-22 03:48:19

标签: oracle oracle10g oracle11g

表格中有三列

Column names with datatypes
First_week - Number 
Days       - Number
Second_week- Number

Column Values
8
6
11

我想连接这些值,结果返回8/6/11 如果任何列值为null,则连接必须为8 / - / 11 如果all都为null,那么结果必须是 - / - / - 如何在oracle查询中实现?

3 个答案:

答案 0 :(得分:2)

要实现这一点,您可以使用decodenvl函数或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/-
-/-/-

答案 1 :(得分:1)

http://www.techonthenet.com/oracle/functions/coalesce.php

“在Oracle / PLSQL中,coalesce函数返回列表中的第一个非null表达式。如果所有表达式求值为null,则coalesce函数将返回null。”

http://docs.oracle.com/cd/B19306_01/server.102/b14200/operators003.htm#i997789

“||连接字符串和CLOB数据。”

现在我们有了所有的构建块来编写类似的东西:

COALESCE(First_week,' - ')|| '/'|| COALESCE(天,' - ')|| '/'|| COALESCE(Second_week,' - ')

答案 2 :(得分:1)

这是什么

SELECT    NVL (TO_CHAR (FIRST_WEEK), '-')
       || '/'
       || NVL (TO_CHAR (DAYS), '-')
       || '/'
       || NVL (TO_CHAR (SECOND_WEEK), '-')
  FROM YOUR_TABLE