[ОТВЕТИТЬ]
Опции темы
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, время: 15:13.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.