Oracle SQL, объединить несколько столбцов + добавить текст

66

Итак, я в основном хочу отобразить это (целая строка в столбце ONE):

Мне нравится [тип колонки] торт с [глазом обледенения] и [столбец фруктов].

Результат должен быть:

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.

Мне нужен какой-то оператор TO_CHAR, который делает ([column] "some text" [column]) "new_column_name";

Что я должен знать?

Теги:
concatenation

6 ответов

92

У вас есть два варианта конкатенации строк в Oracle:

Пример CONCAT:

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

Использование || example:

'I like ' || t.type_desc_column || ' cake with ' || t.icing_desc_column || ' and a ' || t.fruit_desc_column
  • 8
    Этот конкат вызвал у меня рак лулза, upvote!
  • 0
    Это действительно медленно (запустить, а не набирать). Есть ли лучший способ?
Показать ещё 1 комментарий
48

Вы попробовали оператор ||?

Проверьте это > " >

21

Ниже для меня работает запрос @Oracle 10G ----

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

O/P -

1111 [email protected] 4th street-capetown-sa

19

выберите 'Мне нравится' || type_column || 'с помощью ect....

  • 0
    Большое спасибо за этот ответ. Мне нравится '||' так как это облегчает поддержку запроса SQL.
8

Попробуйте следующее:

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

Он должен конкатенировать все эти данные как одну запись столбца с именем "Cake_Column".

0

Начиная с Oracle 11, появилась новая функция LISTAGG, которая делает то же самое, что и вы здесь.

Пример:

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 для LISTAGG

Ещё вопросы

Сообщество Overcoder
Наверх
Меню