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