-
select nvl(null||'-','+') A from dual
разве он не должен null с '-' сконкатенейтить, получить null и выбрать "+"?
-
очень нприятно получилось, если писать nvl(A.REGION||';','')||nvl(A.LOCALITY||';','')||nvl(A.STREET_NAME||';','') ожидается, что если есть именование, то оно будет закончено ;, а если нет - ничего не будет. А получается ";;Минина"
-
decode(region,null,null,region || ';')
или поисковый кейс вместо декода, если это plsql.
-
> Медвежонок ХМЛ © (28.04.11 13:03) [2] > decode(
это понятно, и про case тоже но почему nvl так работает?
-
но почему nvl так работает?
Он как раз работает правильно. select null ||'-' from dual
-
а конкатенация так работает наверное потому, что иначе будет адский гитлер и холокост.
если надо склеить n значений, то пришлось бы помнить, что любой нулл все испортит и надо проверять
-
Еще не надо забывать, что в оракле пустая строка и null - это одно и тоже.
-
Еще не надо забывать, что в оракле пустая строка и null - это одно и тоже.
видимо ноги именно из этого и растут. для mssql:
select null + '-'
результат будет нулл, а select '' + '-' будет '-'
и все потому что пустая строка там не нулл
-
> или поисковый кейс вместо декода, если это 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
-
> видимо ноги именно из этого и растут. > для mssql: > select null + '-' > результат будет нулл, а select '' + '-' будет '-' > и все потому что пустая строка там не нулл
ну да, наверное. миграция запросов .. несколько неожиданно все равно, на первый взгляд :)
|