2015-08-14 3 views
1

Я работаю в MS SQL Server, и я никогда не использовал PLSQL, но в последнее время я получил строку кода от коллеги (см):Oracle/SQL для перевода SQL Server

substr(Field1, 1, 8)||'*'||SUBSTR(Field1, 10, 1) 

Я могу позаботиться о substr ->substring бит достаточно легко, но я потерян относительно того, что ||'*'|| означает/делает; это конкатенация или что-то еще, о чем я еще не думал?

+1

это конкатенация. –

+1

В зависимости от контекста getcha заключается в том, что Oracle обрабатывает нулевые VARCHAR и NULL как синонимы, иногда действующие nullish, иногда нет. В Oracle 'null || '*'' дает '' * '', тогда как на SQL Server' null +' * ''даст' null'. В зависимости от шансов подстановок, возвращающих null, вы можете обернуть 'coalesce (substring (...), '')', чтобы получить аналогичное поведение на SQL Server. –

+0

В вашем вопросе нет кода PL/SQL. –

ответ

1

Оператор || в Oracle (и как @a_horse_with_no_name commented - стандартный ANSI) SQL действительно является оператором конкатенации между строками. В SQL SQL Server SQL вы просто используете +. Таким образом, перевод будет:

SUBSTRING(Field1, 1, 8) + '*' + SUBSTRING(Field1, 10, 1) 
+0

Спасибо, Mureinik! – eddymc2

+0

@ eddymc2: на самом деле это не оператор конкатенации Oracle. '||' - это оператор, который определен в стандарте SQL. –

+0

У меня создалось впечатление, что '+' был стандартным способом объединения строк в SQL и что '||' был проприетарным синтаксисом Oracle. Сегодня узнал что-то новое. Спасибо @a_horse_with_no_name. – Mureinik

1

Как @MarcB сказал, что это объединение, || {string here} || эквивалентно + или concat() в SQL Server:

substring(Field1, 1, 8)+ '*' + substring(Field1, 10, 1) 
+1

Спасибо, FutbolFan! Удачи в этом сезоне! – eddymc2

+0

@ eddymc2 Ха-ха, спасибо, брат! – FutbolFan

0

Результат конкатенации двух строк символов еще один символ строка. Если обе символьные строки имеют тип данных CHAR, результат имеет тип данных CHAR и ограничен 2000 символами. Если любая строка равна типа данных VARCHAR2, результат имеет тип данных VARCHAR2 и ограничен до 4000 символов. Если любой аргумент является CLOB, результатом является временный CLOB . Заключительные пробелы в символьных строках сохраняются путем конкатенации , независимо от типов данных строки или CLOB.

На большинстве платформ оператор конкатенации представляет собой две сплошные вертикальные полосы , как показано в таблице 4-3. Однако некоторые платформы IBM используют для этого оператора разбитые вертикальные полосы. При перемещении файлов сценариев SQL между системами, имеющими разные наборы символов, например между ASCII и EBCDIC, вертикальные полосы не могут быть переведены в вертикальную полосу , необходимую целевой среде Oracle Database. Oracle предоставляет символьную функцию CONCAT в качестве альтернативы вертикальной панели Оператор для случаев, когда трудно или невозможно управлять Перевод выполняется операционной системой или сетевыми утилитами. Используйте эту функцию в приложениях, которые будут перемещаться между средами с различными наборами символов.

Хотя Oracle обрабатывает строку символов нулевой длины, как нули, конкатенацию строки символов нулевой длины с другим операндом всегда приводит к другому операнду, поэтому нуль может привести только из конкатенации двух нулевых строк. Однако это может не продолжаться до в будущих версиях базы данных Oracle. Чтобы скомпоновать выражение , которое может быть нулевым, используйте функцию NVL для явного преобразования в строку нулевой длины.

source

Чтобы иметь более четкий исходный код, который вы могли бы рассмотреть использовать CONCAT

Это сообщение about perfomance