coalesce (null, '') получить ноль в Oracle, получить '' в SQL Server? - PullRequest
0 голосов
/ 12 ноября 2018
  • Версия Oracle: 12.1.0.2.0
  • Версия SQL Server: 2012

Мой код:

select COALESCE (null, '') 
from dual

в возвратах Oracle null результат, но

select COALESCE (null, '')

в SQL Server возвращает результат ''.

Почему этот результат отличается?

Это стандарты ANSI, разве это не должно быть одинаковым?

Ответы [ 4 ]

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

Присвоение строки нулевой длины полю приводит к NULL при работе с типом символов переменной длины (например, VARCHAR или VARCHAR2). Однако, когда строка нулевой длины назначается типу символа фиксированной длины (например, CHAR), результатом является то, что поле заполнено пробелом до полной определенной длины, как требуется для типа данных CHAR. См. Этот вопрос AskTom для получения дополнительной информации.

Удачи.

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

Согласно документации Oracle "База данных Oracle обрабатывает символьное значение с нулевой длиной как нулевое."

Ссылка: https://docs.oracle.com/database/121/SQLRF/sql_elements005.htm#SQLRF30037

Что не является стандартом ANSI.

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

В документе Oracle о NULL

База данных Oracle обрабатывает символьное значение с нулевой длиной как нулевое.

Oracle внутренне изменяет пустую строку на NULL значения. Oracle просто не позволит вставить пустую строку.

select null from dual

так же, как

select '' from dual

Все они возвращаются NULL.

Поэтому, когда вы используете select COALESCE (null,'') from dual, в Oracle это будет означать select COALESCE (null,null) from dual.

sqlfiddle

Вот ссылка на эту тему.

Почему Oracle 9i обрабатывает пустую строку как NULL?

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

вы пробовали код ниже в Oracle и SQL Server

select COALESCE (null,' ') from dual
select COALESCE (null,' ')

возвращает ненулевой результат как oracle, так и sql server

Основная проблема заключается в том, как oracle и SQL Server обрабатывают второе выражение ''. В Oracle он обрабатывается как NULL, но SQL Server рассматривает его как пустое пространство.

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