Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 chr(10), like != between  [new]
Shredder2003
Member

Откуда: деревня Ильбяково Азнакаевского района РТ
Сообщений: 462
Присоединен к:
Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.4.0 - 64bit Production


SQL> select dump(substr(tttxt010.t$text,1,6)),substr(tttxt010.t$text,1,6)
  2  from baandb.ttttxt010020 tttxt010
  3  where tttxt010.t$text like '67-1%'
  4  --where tttxt010.t$text between '67-1' and '67-1я'
  5  and rownum<2
  6  ;

DUMP(SUBSTR(TTTXT010.T$TEXT,1,6))
--------------------------------------------------------------------------
SUBSTR
------
Typ=1 Len=6: 54,55,45,49,10,32
67-1


SQL> select dump(substr(tttxt010.t$text,1,6)),substr(tttxt010.t$text,1,6)
  2  from baandb.ttttxt010020 tttxt010
  3  --where tttxt010.t$text like '67-1%'
  4  where tttxt010.t$text between '67-1' and '67-1я'
  5  ;

строки не выбраны


Однако!

SQL> SELECT dump(substr(tttxt010.t$text,1,6)),substr(tttxt010.t$text,1,6)
  2  from
  3  (
  4  select '67-1'||chr(10)||'    ' t$text
  5  from dual                                                            
                                                 
  6  ) tttxt010
  7  --where tttxt010.t$text like '67-1%'
  8  where tttxt010.t$text between '67-1' and '67-1я'
  9  ;

DUMP(SUBSTR(TTTXT010.T$TEXT,1, SUBSTR
------------------------------ ------
Typ=1 Len=6: 54,55,45,49,10,32 67-1


Подскажите пожалуйста, почему так?
25 июл 07, 15:39    [4435023]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Тип tttxt010.t$text случайно не CHAR?
25 июл 07, 16:03    [4435176]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
Goldminer
Member

Откуда:
Сообщений: 553
BTW, вариант с between не только не эквивалентен like, но и непереносим, т.к. зависит от кодировки базы и от NLS_SORT. Кто Вам сказал, что 'я' самая "большая" буква в любой кодировке?
25 июл 07, 16:13    [4435250]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
Shredder2003
Member

Откуда: деревня Ильбяково Азнакаевского района РТ
Сообщений: 462
1. char
2. <<<Кто Вам сказал, что 'я' самая "большая" буква в любой кодировке?>>>
не отклоняемся от сути.
Если Вас это смущает, замени те 'я' на 'z'

Elic сможет просветить в этом вопросе?
25 июл 07, 16:53    [4435567]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Shredder2003
1. char

Blank-Padded Comparison Semantics
If the two values have different lengths, Oracle
first adds blanks to the end of the shorter one so their lengths are equal. Oracle then
compares the values character by character up to the first character that differs. The
value with the greater character in the first differing position is considered greater.
If two values have no differing characters, then they are considered equal. This rule
means that two values are equal if they differ only in the number of trailing blanks.
Oracle uses blank-padded comparison semantics only when both values in the
comparison are either expressions of datatype CHAR, NCHAR, text literals, or values
returned by the USER function.
25 июл 07, 16:55    [4435580]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Shredder2003
не отклоняемся от сути.

Таки не отклоняемся. ;-) . Я это к тому, что ВАШ эффект в точности той же природы. (' ' > chr(10))
25 июл 07, 17:01    [4435620]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Shredder2003
..

SQL> select dump(substr(tttxt010.t$text,1,6)),substr(tttxt010.t$text,1,6)
  2  from baandb.ttttxt010020 tttxt010
  3  --where tttxt010.t$text like '67-1%'
  4  where tttxt010.t$text between '67-1' and '67-1я'
  5  ;

строки не выбраны

..

для char можно
between '67-1'||chr(0) and '67-2'||chr(255)
в однобайтовой кодировке (и в предположении что и 0 и 255 таки не встречаются в том чаре,
иначе - эрпадить обоих до длины поля)
25 июл 07, 18:27    [4436131]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
упс..
between '67-1'||chr(0) and '67-1'||chr(255)
25 июл 07, 18:34    [4436157]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
Shredder2003
Member

Откуда: деревня Ильбяково Азнакаевского района РТ
Сообщений: 462
Goldminer
Shredder2003
1. char

Blank-Padded Comparison Semantics
If the two values have different lengths, Oracle
first adds blanks to the end of the shorter one so their lengths are equal. Oracle then
compares the values character by character up to the first character that differs. The
value with the greater character in the first differing position is considered greater.
If two values have no differing characters, then they are considered equal. This rule
means that two values are equal if they differ only in the number of trailing blanks.
Oracle uses blank-padded comparison semantics only when both values in the
comparison are either expressions of datatype CHAR, NCHAR, text literals, or values
returned by the USER function.


Скачал я доку как-то.
Первым делом я полез там в
1. Application Developer's Guide - Fundamentals
2. SQL Reference
Но не нашёл там этого (описания того, как сравниваются строки).
Если возможно, подскажи пожалуйста, где это искать?
Путь (не URL) к этому фрагменту текста.
26 июл 07, 07:58    [4437133]     Ответить | Цитировать Сообщить модератору
 Re: chr(10), like != between  [new]
Elic
Member

Откуда:
Сообщений: 29990
Shredder2003
Если возможно, подскажи пожалуйста, где это искать?
RTFM Blank-Padded Comparison Semantics (FAQ)
Shredder2003
Путь (не URL) к этому фрагменту текста.
Путь сам вычислишь :)
26 июл 07, 08:43    [4437246]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить