![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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||';','')
ожидается, что если есть именование, то оно будет закончено ;, а если нет - ничего не будет. А получается ";;Минина"