21.07.2006 08:03
RKuzmin
 
Как известно в оракле тип CHAR дополняется справа пробелами до указанного в типе значения.
Тип varchar2 этип свойством не обладает.
Также известно, что для типа char:
'YES' = 'YES '

а для типа varchar2:
'YES' ^= 'YES '

Однако наткнулся на следующее:

SQL> create table t (c varchar2(20));

Таблица создана.

SQL> insert into t values ('ABCD');

1 строка создана.

SQL> select * from t where c like 'ABCD_';

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

SQL> select * from t where c like 'ABCD_%';

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

SQL> drop table t;

Таблица удалена.

//***********************************
Пока все верно однако далее:

SQL> create table t (c char(20));

Таблица создана.

SQL> insert into t values ('ABCD');

1 строка создана.

SQL> select * from t where c like 'ABCD_'; (* ?!!)

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

SQL> select * from t where c like 'ABCD '; (* 2)

C
--------------------
ABCD


SQL> select * from t where c like 'ABCD_%'; (* 3)

C
--------------------
ABCD

SQL> drop table t;

Вот в чем ПАРАДОКС. Нарпяжем мозги :).
Для сравнения приведены запросы (* 2) и (* 3), которые как и
ожидалось возвращают одну строку.
Почему же тогда запрос (* ?!!) не возвращает данные?
21.07.2006 09:03
kadr
 
ты бы на sql.ru спросил, там любят пятничные головоломки
21.07.2006 10:04
RKuzmin
 
напишу, напишу и туда тоже. Просто я к ним пароль забыл :))). Вот пришлют так сразу. А что секрет так никто и не знает?
21.07.2006 10:09
OlegON
 
А что тут головоломочного, он сам и ответил. В char все забивается пробелами, соотвественно, строка длиннее, чем ABCD_. А вот sql.ru я люблю...
21.07.2006 10:35
RKuzmin
 
НЕправильно!
(В char все забивается пробелами, соотвественно, строка длиннее, чем ABCD_. )
Я же приводил: Также известно, что для типа char:
'YES' = 'YES '

смотрите пример внимательнее.

Да и еще строка:
SQL> select * from t where c like 'ABCD '; (* 2)
возвращает результат!
C
--------------------
ABCD
21.07.2006 10:37
OlegON
 
А разницу между = и like знаем? *02
21.07.2006 10:37
RKuzmin
 
в запросе select * .... 'ABCD ' (после символа D стоит Пробел ! )
21.07.2006 10:41
RKuzmin
 
to olegon > да и причем сдесь знак равенства? C равенством все работает как надо. :)
А вот like, это заморочка!
21.07.2006 10:45
OlegON
 
Цитата:
RKuzmin to olegon > да и причем сдесь знак равенства? C равенством все работает как надо. :)
А вот like, это заморочка!
Просто ABCD_ - это ты четко говоришь, что у тебя 5 символов, а если 'ABCD ', то тут уже то правило включается. 'YES'='YES '
21.07.2006 12:30
RKuzmin
 
to olegon >
тогда уж включается не 'ABCD ' "=" {column value}, а
скорее всего 'ABCD ' ">=" {column value}. Хотя все равно странно как-то.
Часовой пояс GMT +3, время: 09:05.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.