2009-10-24 51 views
67

Así que básicamente quiere mostrar este (fila entera en una sola columna):Oracle SQL, concatenar varias columnas + añadir texto

me gusta [columna de tipo] pastel con [columna de la formación de hielo] y [columna de la fruta].

El resultado debe ser:

Cake_Column 
---------------- 

I like chocolate cake with whipped_cream and a cherry. 

I like strawberry cake with vanilla_cream and a lemon_slice. 

etc. 

etc. 

necesito algún tipo de declaración que hace TO_CHAR ([columna] "algún texto" [columna]) "new_column_name";

¿Qué se supone que debo saber?

Respuesta

20
select 'i like' || type_column || ' with' ect.... 
+0

Muchas gracias por esta respuesta. Me gusta el '||' ya que hace que sea más fácil mantener la consulta SQL. –

101

usted tiene dos opciones para concatenar cadenas en Oracle:

ejemplo CONCAT:

CONCAT(
    CONCAT(
    CONCAT(
     CONCAT(
     CONCAT('I like ', t.type_desc_column), 
     ' cake with '), 
     t.icing_desc_column), 
    ' and a '), 
    t.fruit_desc_column) 

Usando || ejemplo:

'I like ' || t.type_desc_column || ' cake with ' || t.icing_desc_column || ' and a ' || t.fruit_desc_column 
+5

¡Este concat me dio cáncer de lulz, upvote! –

+0

Esto es realmente lento (ejecutar, no escribir realmente). ¿Hay alguna forma mejor? –

+0

Esto es muy feo, con respecto a un DBMS muy antiguo. ¿Cómo es que Oracle no apoya a muchos argumentos-versión Concat? Sin embargo, gracias a Shankar, hay un || operador. –

23

A continuación consulta funciona para mí @Oracle 10G ----

select PHONE, CONTACT, (ADDR1 || '-' || ADDR2 || '-' || ADDR3) as Address 
from CUSTOMER_DETAILS 
where Code='341'; 

O/P -

1111 abc @ gmail .com 4th street-capetown-sa

8

Prueba esto:

SELECT 'I like ' || type_column_name || ' cake with ' || 
icing_column_name || ' and a ' fruit_column_name || '.' 
AS Cake_Column FROM your_table_name; 

Debe concatenar todos esos datos como una sola entrada columna denominada "Cake_Column".

0

A partir de Oracle 11, hay una nueva característica llamada LISTAGG que hace algo similar a lo que quiere aquí.

Ejemplo:

SELECT LISTAGG(last_name, '; ') 
WITHIN GROUP (ORDER BY hire_date, last_name) "Emp_list", 
       MIN(hire_date) "Earliest" 
    FROM employees WHERE department_id = 30; 

Emp_list              Earliest 
------------------------------------------------------------ --------- 
Raphaely;Khoo; Tobias; Baida; Himuro; Colmenares    07-DEC-02 

Oracle documentation for LISTAGG

Cuestiones relacionadas