|
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 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Staxоракле поддерживает третье правило?Ты не умеешь читать оракловую документацию?! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:45 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
ElicStaxоракле поддерживает третье правило?Ты не умеешь читать оракловую документацию?! переводную (русский/польский) да, английскую с большим трудом в оракле поддерживается третье правило Кодда для строк, или нет? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:57 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
-2-StaxNull не должен рассматриватся как пустая строкa ('' is not null)В скобочках обратное утверждению выражение. Утверждение нарушалось бы, если выражение length(null)=0 даст истину. почему обратное? пустая строка не null ('' is not null), в оракле не так, нарушает кстати, в старых версиях length('')=0, если в кого-то остался третий форм можете проверить .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 13:02 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Staxанглийскую с большим трудомТогда возьми за правило, если тебе сказали, что нечто - это миф, а ты не можешь ни подтвердить его, ни опровергнуть, то хотя бы не распространяй его больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 13:07 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Staxкак перевести?автор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. оракле поддерживает третье правило?Null values are supported? Да. in a systematic way? Затрудняюсь опровергнуть. Поэтому Да. independent of data type? Не понятно, что имелось ввиду под independent. Если, что null не имеет типа, то частично Да. В скобочках приписка, что NULL отличается от пустой строки. Но не утверждается, что character string должен быть реализован под именем varchar2 или varchar. Правила Кодда слишком абстрактны. Если и придираться, то к полноте поддержки ansi sql:Oracle Compliance to Core SQLOracle fully supports these subfeatures: E021-01, CHARACTER data type E021-07, Character concatenation E021-08, UPPER and LOWER functions E021-09, TRIM function E021-10, Implicit casting among character data types Oracle partially supports these subfeatures: E021-02, CHARACTER VARYING data type (Oracle does not distinguish a zero-length VARCHAR string from NULL) E021-03, Character literals (Oracle regards the zero-length literal '' as being null) E021-12, Character comparison (Oracle's rules for padding the shorter of two strings to be compared differs from the standard) Staxпочему обратное?Потому что в используемом для утверждения языке принято читать слева направо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 13:09 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
-2-Staxкак перевести?пропущено... оракле поддерживает третье правило?Null values are supported? Да. in a systematic way? Затрудняюсь опровергнуть. Поэтому Да. independent of data type? Не понятно, что имелось ввиду под independent. Если, что null не имеет типа, то частично Да. В скобочках приписка, что NULL отличается от пустой строки. Но не утверждается, что character string должен быть реализован под именем varchar2 или varchar. Правила Кодда слишком абстрактны. Если и придираться, то к полноте поддержки ansi sql:Oracle Compliance to Core SQLOracle fully supports these subfeatures: E021-01, CHARACTER data type E021-07, Character concatenation E021-08, UPPER and LOWER functions E021-09, TRIM function E021-10, Implicit casting among character data types Oracle partially supports these subfeatures: E021-02, CHARACTER VARYING data type (Oracle does not distinguish a zero-length VARCHAR string from NULL) E021-03, Character literals (Oracle regards the zero-length literal '' as being null) E021-12, Character comparison (Oracle's rules for padding the shorter of two strings to be compared differs from the standard) Staxпочему обратное?Потому что в используемом для утверждения языке принято читать слева направо. Конечно что Кодд не рассматривал varchar2 или varchar я про оракля (из доки) авторТип данных VARCHAR Тип данных VARCHAR в настоящее время является синонимом типа данных VARCHAR2. Однако в будущей версии ORACLE тип данных VARCHAR будет хранить строки символов переменной длины с иной семантикой сравнения . Поэтому используйте тип данных VARCHAR2 для символьных строк переменной длины. под "с иной семантикой сравнения" некоторые мои учителя понимали и что будет разница между null и '' (пустой строкой) зи насчет читать слева направо '' not is null мож и так правильно, не спорю мне обычнее '' is not null .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 13:23 |
|
null||string -> null
|
|||
---|---|---|---|
#18+
Alibek B., ну и куда пошёл, в какую сторону? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2019, 09:04 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1882033]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 172ms |
0 / 0 |