Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Oracle: опять про null. почему ответ "-"?!


OW ©   (2011-04-28 12:57:00) 

select nvl(null||'-','+') A from dual

разве он не должен null с '-' сконкатенейтить, получить null и выбрать "+"?


OW   (2011-04-28 14:25:00) [1]


> видимо ноги именно из этого и растут.
> для mssql:
> select null + '-'
> результат будет нулл, а select '' + '-' будет '-'
> и все потому что пустая строка там не нулл

ну да, наверное.
миграция запросов .. несколько неожиданно все равно, на первый взгляд :)


Игорь Шевченко   (2011-04-28 13:40:00) [2]


> или поисковый кейс вместо декода, если это plsql.


даже если это SQL

WITH foo AS (
 SELECT 'foo' bar FROM dual
 UNION ALL
 SELECT NULL FROM dual
)
SELECT CASE WHEN foo.bar IS NULL
        THEN NULL
        ELSE foo.bar||';'
      END
 FROM foo


Медвежонок ХМЛ   (2011-04-28 13:20:00) [3]

Еще не надо забывать, что в оракле пустая строка и null - это одно и тоже.

видимо ноги именно из этого и растут.
для mssql:

select null + '-'

результат будет нулл, а select '' + '-' будет '-'

и все потому что пустая строка там не нулл


Kerk   (2011-04-28 13:13:00) [4]

Еще не надо забывать, что в оракле пустая строка и null - это одно и тоже.


Медвежонок ХМЛ   (2011-04-28 13:09:00) [5]

а конкатенация так работает наверное потому, что иначе будет адский гитлер и холокост.

если надо склеить n значений, то пришлось бы помнить, что любой нулл все испортит и надо проверять


Медвежонок ХМЛ   (2011-04-28 13:07:00) [6]

но почему nvl так работает?

Он как раз работает правильно.
select null ||'-' from dual


OW   (2011-04-28 13:04:00) [7]


> Медвежонок ХМЛ ©   (28.04.11 13:03) [2]
> decode(

это понятно, и про case тоже
но почему nvl так работает?


Медвежонок ХМЛ   (2011-04-28 13:03:00) [8]

decode(region,null,null,region || ';')

или поисковый кейс вместо декода, если это plsql.


OW   (2011-04-28 13:00:00) [9]

очень нприятно получилось, если писать
nvl(A.REGION||';','')||nvl(A.LOCALITY||';','')||nvl(A.STREET_NAME||';','')
ожидается, что если есть именование, то оно будет закончено ;, а если нет - ничего не будет. А получается ";;Минина"


Наверх

Титульная страница Поиск, карта сайта Написать письмо