|
null||string -> null
|
|||
---|---|---|---|
#18+
Подскажите, можно ли без дополнительного nvl2 сделать так, чтобы конкатенация строки с null давала null? Нужно примерно в таком запросе: select coalesce('книга '||i1.value, 'журнал '||i2.value, 'id #'||i3.value) В Access/Oracle есть два оператора для соединения строк (+ и &), которые как раз и отличаются обработкой null. Есть ли подобная хитрость в Oracle? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 14:09 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Кейс и декоде тоже не подойдёт? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 19:14 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
decode это как? case можно, но с nvl2 понятнее и компактнее. Я думал, что может быть можно как-то проще, чем coalesce(nvl2(i1.value, 'книга '||i1.value, null), nvl2(i2.value, 'журнал '||i2.value, null), 'запись #'||i.value). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 21:42 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B.decode это как? case можно, но с nvl2 понятнее и компактнее. Я думал, что может быть можно как-то проще, чем coalesce(nvl2(i1.value, 'книга '||i1.value, null), nvl2(i2.value, 'журнал '||i2.value, null), 'запись #'||i.value).по-моему, как раз кейс проще и понятнее Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 21:46 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
P.S. Но я бы оставил nvl2. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 21:50 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B. Код: plsql 1.
можно запутать еще больше :) Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2019, 08:10 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2019, 10:08 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Нет, это уже совсем не то. Вариант MSSQL (с использованием +) выглядел бы наиболее красиво. Если его нет, то или case (логично и ясно, но громоздко), или coalesce с nvl2 (компактно и тоже логично). А вложенные nvl2 только все запутывают и обязательно приведут к путаницам в подсчетах вложенных скобок. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 10:25 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B.путаницам в подсчетах вложенных скобок.хм... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 10:36 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B., да уж создал бы свою функцию/оператор и назвал типа ANSI_CONCAT ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:59 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Странное предложение. А что это мне даст? Какая разница, писать nvl2(i.value, 'abc'||i.value, null) или ansi_concat(i.value, 'abc')? Ни в количестве символов, ни в быстродействии, ни в ясности какой-то существенной разницы не будет. Вот если бы можно было перезагрузить оператор + для строковых значений, в этом был бы практический смысл, было бы красиво и компактно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:05 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B.Ни в количестве символов Код: plsql 1. 2.
Alibek B.ни в ясностиправда? зы. https://community.oracle.com/ideas/19866 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:30 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B., ну и для полноты картины: твой вариант с nvl2 отталкивается от is null для одного значения, а не обоих ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:32 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
xtenderправда? Да, nvl2 более универсален и понятен, чем отдельная специальная функция. 'Клиент #' & id & (', телефон '+phone) & ('адрес: '+adr & ('/'+build+' (строение)')) 'Клиент #'||id || nvl2(phone, ', телефон '||phone, '') || nvl2(adr, 'адрес: '||adr || nvl2(build, '/'||build||' (строение)', ''), '') 'Клиент #'||id || ansi_concat(phone, ', телефон ') || ansi_concat(adr, 'адрес: ' || nvl2(build, '/'||build||' (строение)', '')) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:44 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B., ну, если ты не знаешь, что такое стандарт ANSI и функция CONCAT, которая, кстати, есть в оракле, но ее оракловая реализация несовместима с ANSI... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 16:38 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B.'Клиент #' & id & (', телефон '+phone) & ('адрес: '+adr & ('/'+build+' (строение)')) 'Клиент #'||id || nvl2(phone, ', телефон '||phone, '') || nvl2(adr, 'адрес: '||adr || nvl2(build, '/'||build||' (строение)', ''), '') 'Клиент #'||id || ansi_concat(phone, ', телефон ') || ansi_concat(adr, 'адрес: ' || nvl2(build, '/'||build||' (строение)', '')) если вас интересует именно синтаксический сахар, то его, к сожалению/счастью (по вкусу), нет. а дальше надо смотреть на ваши приоритеты. если это максимальная читабельность, поддерживаемость, и отсутствие подсчета скобок при приемлемой скорости, то сравнивать три варианта выше надо не друг с другом (они все плохие), а с отдельной pl/sql функцией, собирающей элементы адреса в строку. если же вам зачем-то нужно выдавить всё до последней миллисекунды, то приемлемую читабельность вам в первую очередь обеспечит не сахар и не выбор между nvl2/nullif/case/decode, а нормальное форматирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 03:02 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B.жно было перезагрузить оператор + для строковых значений, в этом был бы практический смысл, было бы красиво и компактно. імхо ноги ростут из-за игнорирования оряклем третьего правила авторПравило 3: Систематическая поддержка отсутствующих значений (Systematic Treatment of Null Values): Неизвестные, или отсутствующие значения NULL, отличные от любого известного значения, должны поддерживаться для всех типов данных при выполнении любых операций. Например, для числовых данных неизвестные значения не должны рассматриваться как нули, а для символьных данных — как пустые строки . Еще с времен семерки ходила мулька об varchar2, типа доделают (будьте бдительны) для varchar2 будет по старинке '' is null, а для varchar пустая строка будет уже is NOT null ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 09:05 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Staxноги ростут из-за игнорирования оряклем третьего правила авторПравило 3: Систематическая поддержка отсутствующих значений (Systematic Treatment of Null Values): Неизвестные, или отсутствующие значения NULL, отличные от любого известного значения, должны поддерживаться для всех типов данных при выполнении любых операций. Например, для числовых данных неизвестные значения не должны рассматриваться как нули, а для символьных данных — как пустые строки . За "правило" ты выдаешь вольный пересказ. Но даже в этом пересказе нет указаний на "игнорирования оряклем". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 09:28 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Stax(будьте бдительны)Хватит уже распространять гнилые мифы. Семантика varchar2 никогда не изменится. А некоего varchar-а нет и не предвидится. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 09:29 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Elic, авторГЛАВА 3 ████████████████████████████████████████████████████████████████ ВЫБОР ТИПА ДАННЫХ Тип данных VARCHAR Тип данных VARCHAR в настоящее время является синонимом типа данных VARCHAR2. Однако в будущей версии ORACLE тип данных VARCHAR будет хранить строки символов переменной длины с иной семантикой сравнения. Поэтому используйте тип данных VARCHAR2 для символьных строк переменной длины. ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:07 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
-2-Staxноги ростут из-за игнорирования оряклем третьего правила пропущено... За "правило" ты выдаешь вольный пересказ. Но даже в этом пересказе нет указаний на "игнорирования оряклем". ето не мой пересказ, а из русской википедии что значит нет указавний, прямое противоречие Null не должен рассматриватся как пустая строкa ('' is not null) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:16 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
авторбудетПереводчик не угадал с модальностью глагола, а ты постоянно порешь страшилки, не понимая их сути. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:18 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
StaxNull не должен рассматриватся как пустая строкa ('' is not null)В скобочках обратное утверждению выражение. Утверждение нарушалось бы, если выражение length(null)=0 даст истину. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:41 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
ElicавторбудетПереводчик не угадал с модальностью глагола, а ты постоянно порешь страшилки, не понимая их сути. как перевести? авторRule 3: Systematic treatment of null values: Null values (distinct from the empty character string or a string of blank characters and distinct from zero or any other number) are supported in fully relational DBMS for representing missing information and inapplicable information in a systematic way, independent of data type. оракле поддерживает третье правило? зы страшилок уже ни грамульки не боюсь .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:43 |
|
|
start [/forum/topic.php?fid=52&msg=39865626&tid=1882033]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 410ms |
0 / 0 |