В чем смысл || '|' || в oracle? - PullRequest
       36

В чем смысл || '|' || в oracle?

0 голосов
/ 23 февраля 2020

Я вижу запрос с этим "COUNT(DISTINCT(code || '|' description)":

SELECT ...,..., ...,NULL, COUNT(DISTINCT(code || '|' description)
FROM....

Но я не понимаю, что означает это "COUNT(DISTINCT(code || '|' description)"? Вы знаете, что это такое? Спасибо

Ответы [ 3 ]

1 голос
/ 23 февраля 2020

В Oracle двойная труба (||) обозначает конкатенацию строк. Это:

select 'a' || 'b' from dual

Выход:

ab

Когда дело доходит до этого выражения: COUNT(DISTINCT(code || '|' description):

  • оно недопустимо sql code: круглые скобки не сбалансированы, отсутствует оператор конкатенации; Я полагаю, вы имели в виду COUNT(DISTINCT code || '|' || description)

  • последний объединяет code и description с разделителем | и подсчитывает различные результирующие значения

1 голос
/ 23 февраля 2020

Предположительно, вы намереваетесь:

COUNT(DISTINCT code || '|' || description)

Цель этого кода - подсчитать уникальные комбинации code и description. COUNT(DISTINCT) в Oracle принимает только один аргумент. Поэтому, если вы хотите посчитать разные комбинации, вам нужно прибегнуть к таким хитростям, как объединение значений воедино.

Это соединение значений с вертикальной чертой между ними:

'NY' || '|' || 'New York' --> 'NY|New York'

Вертикальная черта - это разделитель, который предположительно не встречается (или встречается редко) ни в code, ни в description.

1 голос
/ 23 февраля 2020

|| является оператором конкатенации строк

В этом коде есть небольшая синтаксическая ошибка, но похоже, что он должен был объединить столбец кода со значениями столбца описания, разделенными каналом

code, description
A123, code for blah blah

Становится:

A123|code for blahblah 

(Если sql изменен на code || '|' || description

...