Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Странность при сопоставлении: <string> LIKE null в разных СУБД. / 25 сообщений из 56, страница 1 из 3
04.10.2008, 11:33
    #35576154
Ozzy The Terrible
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Всем привет.
Запуск команды:
select case when ',005,006,007' like NULL then 1 else 0 end

в MS SQL 2005 XE возвращает 1 (единицу).

Такая же команда в Firebird 2.*:
select case when ',005,006,007' like NULL then 1 else 0 end from rdb$database
-- возвращает 0 (ноль).

В оракле не проверял, лень тратить время на скачку и установку.
Проверьте, плз, на своих СУБД - у кого какой результат ?
...
Рейтинг: 0 / 0
04.10.2008, 11:58
    #35576166
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
В Oracle - 0. И это правильно.

--
RemObjects AnyDAC 2.0 / 1.12
...
Рейтинг: 0 / 0
05.10.2008, 00:33
    #35576532
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
в оракле она вызовет даже ошибку т.к. нет from
...
Рейтинг: 0 / 0
05.10.2008, 00:49
    #35576535
Ozzy The Terrible
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
barrabasв оракле она вызовет даже ошибку т.к. нет from дык добавьте фром дуал, неужто сложно ?
select case when ',005,006,007' like NULL then 1 else 0 end from dual - что возвращает ?
...
Рейтинг: 0 / 0
05.10.2008, 15:14
    #35576756
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Ozzy The Terrible wrote:


> select case when ',005,006,007' like NULL then 1 else 0 end from dual -
> что возвращает ?

Возвратит 0, но, на всякий случай, это не означает, что ',005,006,007' like NULL = FALSE. Это
означает, что сравнение с NULL вернуло NULL.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.10.2008, 16:54
    #35576788
Favn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
В DB2 что
values( case when ',005,006,007' like cast( null as char ) then 1 else 0 end );
что
values( case when ',005,006,007' not like cast( null as char ) then 1 else 0 end );
и даже
values( case when cast( null as char ) like cast( null as char ) then 1 else 0 end );
возвращает 0, что абсолютно правильно - любое сравнение с неопределенностью есть неопределенность, а никак не истина или ложь.
MS SQL жжет
...
Рейтинг: 0 / 0
05.10.2008, 17:23
    #35576802
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
FavnMS SQL жжет

Счаз прибежит pkarklin и обнаружится, что у мелкомягких есть ещё
какая-нибудь опция коннекта типа SET ANSI ON, которую надо установить,
чтобы оно таки заработало как у людей...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.10.2008, 17:33
    #35576807
Hallween
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Имхо, сравнивать какое-либо выражение с null при помощи like это ... хм.. странно, мягко говоря
...
Рейтинг: 0 / 0
05.10.2008, 17:41
    #35576810
Ozzy The Terrible
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Hallween Имхо, сравнивать какое-либо выражение с null при помощи like это ... хм.. странно, мягко говоря почему ? идёт сопоставление данных двух табличек, в одной записаны "нормальные" строки типа ',003,005,007,009' etc, а во второй - шаблоны типа '%,005%,007%'. Но шаблоны эти сами тоже являются результатом некоторого сопоставления и могут оказаться null'ами. Что странного Вы видите ?
...
Рейтинг: 0 / 0
05.10.2008, 17:48
    #35576815
Hallween
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
авторЧто странного Вы видите ?
Для сравнения с null существует оператор IS [NOT] NULL, предусмотренный стандартом ANSI. Все остальное от лукавого, имхо
...
Рейтинг: 0 / 0
05.10.2008, 23:12
    #35577061
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Dimitry Sibiryakov
FavnMS SQL жжет

Счаз прибежит pkarklin и обнаружится, что у мелкомягких есть ещё
какая-нибудь опция коннекта типа SET ANSI ON, которую надо установить,
чтобы оно таки заработало как у людей... SET ANSI_NULLS ON | OFF, IIRC
...
Рейтинг: 0 / 0
05.10.2008, 23:19
    #35577065
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Ozzy The Terribleselect case when ',005,006,007' like NULL then 1 else 0 end
в MS SQL 2005 XE возвращает 1 (единицу)
Здорово похоже на багу. Не должно такого быть ни с какими опциями и ни в какой ситуации.
...
Рейтинг: 0 / 0
06.10.2008, 09:18
    #35577264
daw
daw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
>Запуск команды:
>select case when ',005,006,007' like NULL then 1 else 0 end
>в MS SQL 2005 XE возвращает 1 (единицу).

бага это.
на 8.00.2039 - 0
на 10.0.1600.22 тоже 0
на 9.00.3239.00 - 1. но, если любая из частей ',005,006,007' like NULL - не константа, то снова, как и положено, - 0.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.10.2008, 11:48
    #35577648
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Sybase sa10, результат 0.
Вообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами. Итого приходим к ситуации, когда результат такой операции будет неопределен или вернее зависеть от конкретной реализации сервера. Несмотря на то, что остальные сревера кроме mssql2005 отработали как-бы верно, но все-равно, использование конструкции в таком виде разработчиком неверно логически.
Вывод - наличие null в объединении обязательно надо проверять через isnull.

Why CORBA is DEAD?
...
Рейтинг: 0 / 0
06.10.2008, 11:59
    #35577696
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Код: plaintext
1.
select @@version
select case when ',005,006,007' like NULL then  1  else  0  end



Код: plaintext
1.
2.
3.
4.
5.
6.
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) 
	Feb  9 2007 22:47:07 
	Copyright (c) 1988-2005 Microsoft Corporation
	Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

-----------
1


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
	Jul  9 2008 14:43:34 
	Copyright (c) 1988-2008 Microsoft Corporation
	Enterprise Evaluation Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)



-----------
0


-------------------------
There’s no silver bullet!
...
Рейтинг: 0 / 0
06.10.2008, 13:09
    #35577936
M&#36;
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Ну вы даёте :-) А почему 0 - это правильно? А что "правильно" должен вернуть запрос
Код: plaintext
select case when ',005,006,007' not like NULL then  1  else  0  end from dual
Тоже 0? А где "правильнее" 0?
...
Рейтинг: 0 / 0
06.10.2008, 13:17
    #35577960
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
M&#36;Тоже 0? А где "правильнее" 0?

Да, тоже 0. И правильнее он будет в обеих случаях. Добро пожаловать в
мир троичной логики.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.10.2008, 14:08
    #35578107
M&#36;
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Это двойные стандарты, а не троичная логика. Топикстартер написал кривой запрос, а народ обрадованно захлопал в ладошки, ещё бы - бага в блестящем и неповторимом MSSQL! Любой результат неверен. И хоть убейте, такой ужас писать меня не заставите. Даже если голосованием решим, что 0 - это всё-таки правильная фича :-)

Для топикстартера напишу, что в Оракле есть такая вещь, как nvl. Думаю, что и в блестящем и неповторимом тоже имеется что-то подобное.
...
Рейтинг: 0 / 0
06.10.2008, 14:09
    #35578112
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Ggg_oldВообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами.
Такое впечатление, что в Вашей реальности boolean значение не может быть null
...
Рейтинг: 0 / 0
06.10.2008, 14:11
    #35578115
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
M$И хоть убейте, такой ужас писать меня не заставите.
В качестве эксперимента: каково Ваше отношение к идее вставить в каждую таблицу по специальной "пустой" записи с id = 0 и сделать все внешние ключи not null?
...
Рейтинг: 0 / 0
06.10.2008, 14:14
    #35578122
M&#36;
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
softwarer Ggg_oldВообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами.
Такое впечатление, что в Вашей реальности boolean значение не может быть null
Boolean НЕ может бить ничем, кроме true и false. И с каких пор в Вашей реальности появился тип boolean?
...
Рейтинг: 0 / 0
06.10.2008, 14:16
    #35578134
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
M$ softwarerТакое впечатление, что в Вашей реальности boolean значение не может быть null
Boolean НЕ может бить ничем, кроме true и false.
Плюньте в лицо тому, кто Вам сказал такую глупость.

M$И с каких пор в Вашей реальности появился тип boolean?
Вы не понимаете разницы между "типом boolean" и "boolean значением"?
...
Рейтинг: 0 / 0
06.10.2008, 14:18
    #35578141
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
P. S. Программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает
...
Рейтинг: 0 / 0
06.10.2008, 14:28
    #35578178
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
M$Boolean НЕ может бить ничем, кроме true и false. И с каких пор в Вашей реальности появился тип boolean?

В MS SQL булевый тип, возвращаемый выражением сравнения, может принимать одно из трех возможных значений - TRUE, FALSE и UNKNOWN. Последний как раз для случая, когда хотя бы один из операндов - NULL.

Что касается сабжа, то уже было сказано, что это бага.
...
Рейтинг: 0 / 0
06.10.2008, 14:28
    #35578179
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность при сопоставлении: <string> LIKE null в разных СУБД.
Hello, softwarer!
You wrote on Mon, 06 Oct 08 11:18:12 GMT:

s> P. S. Программисты делятся на три типа - на тех,
s> кто понимает троичную логику и на тех, кто ее не понимает

помимо этого, есть ещё и неопределенное состояние - адепты M$

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Странность при сопоставлении: <string> LIKE null в разных СУБД. / 25 сообщений из 56, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]