Конференция "Базы" » Oracle: опять про null. почему ответ "-"?!
 
  • OW © (28.04.11 12:57) [0]
    select nvl(null||'-','+') A from dual

    разве он не должен null с '-' сконкатенейтить, получить null и выбрать "+"?
  • OW © (28.04.11 13:00) [1]
    очень нприятно получилось, если писать
    nvl(A.REGION||';','')||nvl(A.LOCALITY||';','')||nvl(A.STREET_NAME||';','')
    ожидается, что если есть именование, то оно будет закончено ;, а если нет - ничего не будет. А получается ";;Минина"
  • Медвежонок ХМЛ © (28.04.11 13:03) [2]
    decode(region,null,null,region || ';')

    или поисковый кейс вместо декода, если это plsql.
  • OW © (28.04.11 13:04) [3]

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

    это понятно, и про case тоже
    но почему nvl так работает?
  • Медвежонок ХМЛ © (28.04.11 13:07) [4]
    но почему nvl так работает?

    Он как раз работает правильно.
    select null ||'-' from dual
  • Медвежонок ХМЛ © (28.04.11 13:09) [5]
    а конкатенация так работает наверное потому, что иначе будет адский гитлер и холокост.

    если надо склеить n значений, то пришлось бы помнить, что любой нулл все испортит и надо проверять
  • Kerk © (28.04.11 13:13) [6]
    Еще не надо забывать, что в оракле пустая строка и null - это одно и тоже.
  • Медвежонок ХМЛ © (28.04.11 13:20) [7]
    Еще не надо забывать, что в оракле пустая строка и null - это одно и тоже.

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

    select null + '-'

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

    и все потому что пустая строка там не нулл
  • Игорь Шевченко © (28.04.11 13:40) [8]

    > или поисковый кейс вместо декода, если это 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

  • OW © (28.04.11 14:25) [9]

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

    ну да, наверное.
    миграция запросов .. несколько неожиданно все равно, на первый взгляд :)
 
Конференция "Базы" » Oracle: опять про null. почему ответ "-"?!
Есть новые Нет новых   [134431   +15][b:0][p:0.001]