В чем разница между конкатенацией с пустой строкой и функцией приведения в Oracle SQL - PullRequest
0 голосов
/ 28 ноября 2018

Когда я хочу изменить числовые переменные на строку, есть ли разница между

''||variable

и

cast(variable as char)

?

Ответы [ 5 ]

0 голосов
/ 28 ноября 2018

Если variable определено как, скажем, number, тогда это объявление будет varchar2(40):

''||variable

Тогда как это будет cast(variable as char) будет char(1):

cast(variable as char)

Другими словами, если вы хотите изменить тип данных, используйте явный cast() для этого.Но с семантической длиной данных, например, приведением (переменная как char (45))


Обратите внимание, я проверял это на 12cR1 - мне было бы интересно, если бы люди, использующие более ранние версии, получили другой результат.

0 голосов
/ 28 ноября 2018

Теоретическое различие заключается в том, что один способ конвертации является неявным, а другой - явным.Следует избегать неявных преобразований, когда явный способ доступен и столь же прост.Для этого есть много веских причин, которые выходят за рамки вашего вопроса.

Однако есть и практическая разница.Конкатенация с пустой строкой приведет к значению типа данных VARCHAR2.CAST, как вы написали, приведет к типу данных CHAR(1).Таким образом, два выражения даже не имеют одинаковый тип данных.Хуже того: CAST потерпит неудачу, если ввод будет отличным от однозначного числа.Это потому, что CAST требует указания ширины результата;вы не указали ширину, но для CHAR по умолчанию установлено значение 1. Опять же, обсуждение различий между этими двумя типами данных (таких различий много) выходит за рамки.

Лучше всего использовать TO_CHAR(..., format_model), что дает вам полный контроль над операцией.Результат имеет тип данных VARCHAR2, такой же, как и ваше неявное преобразование (конкатенация).

0 голосов
/ 28 ноября 2018

Нет разницы в конечном результате, но лучше всего было бы использовать существующую TO_CHAR функцию:

TO_CHAR(variable)
0 голосов
/ 28 ноября 2018

Функция SQL CAST преобразует тип данных выражения в другой тип данных.Вы можете привести выражение к любому из следующих типов: CHAR или CHARACTER: представляет числовое значение или строку по ее начальному символу.

||оператор объединяет одну или несколько строк в одну строку.

0 голосов
/ 28 ноября 2018

''||variable - неявное преобразование, а cast(variable as char(20)) - явное преобразование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...