Оператор объединения строк в Oracle, Пост-ГРЭС и SQL Server

Можно попробовать Okular, который может распечатать все страницы в PDF, любят, Проявляют.

16
задан KM. 3 September 2009 в 13:54
поделиться

3 ответа

|| - это стандартный оператор конкатенации SQL (см. SQL 2008: 5.2). Используйте это и жалуйтесь, если это не работает в используемой вами системе; -)

Если серьезно, вы должны заставить другие системы использовать || , а не + . Это не только более стандартно, но и проще случайно вызвать путаницу, если вы используете + , особенно если нужно вывести какие-либо типы или если происходит неявное приведение типов.

Учтите: '5 '+ 2

Если используемая вами система не выдает ошибку в этой системе, а + означает как плюс, так и конкатенацию, вы можете получить некоторые запутанные результаты.

29
ответ дан 30 November 2019 в 15:20
поделиться

'||' конечно работает в Oracle, хотя явно не в SQL Server. (Для тех, кто придет после нас, вот розеттский камень для SQL: Справочник по диалектам SQL )

Если вы исправляете сценарии SQL, я бы рассмотрел следующее решение:

ДО:

sql-shell-command < sql-file.sql

(sql-файл содержит операторы '+')

ПОСЛЕ:

ansi-sql-shell-command < sql-file.sql


sed -e 's/||/\+/' < sql-file.sql | ms-sql-shell-command

(sql-файл содержит операторы '||', вам придется преобразовать ваши файлы)

Идея состоит в том, что вы начинаете с SQL в одном формате, а в особом случае вы запускаете фильтр, чтобы преобразовать его в другой формат. Теоретически вы можете превратить все '+' в '||', но поскольку значительная часть из них может быть числовым сложением, а не конкатенацией строк, это вряд ли сработает.

Сложность вашего фильтра зависит от того, что вы делаете. Если у вас есть произвольные данные в вашем SQL, вам нужно будет получить их, чтобы избежать подстановки в строках. Но если вы настраиваете представления, это, вероятно, будет хорошо.

Вы можете использовать ту же технику в программах, где SQL находится в строках - написать функцию в программе, чтобы переключать ее из одной формы в другую.

1148264]

9
ответ дан 30 November 2019 в 15:20
поделиться

Вы не можете перегружать операторы в Oracle. перегрузка «+» все равно не сработает, поскольку Oracle выполняет автоматическое преобразование типов ('1' + '1' = 2).

Oracle использует оператор конкатенации || , то есть также ANSI-совместимая.

Существует также функция CONCAT , которая (начиная с postgres 9.0 и SQL Server 2012) поддерживается всеми тремя СУБД, для которых она вам нужна.

Обратите внимание, что версия Oracle of CONCAT не является вариативным, как два других. Если вам нужно объединить три или более строк, вам нужно будет вложить:

CONCAT(s1,CONCAT(s2,s3))
22
ответ дан 30 November 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: