powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Странность при сопоставлении: <string> LIKE null в разных СУБД.
56 сообщений из 56, показаны все 3 страниц
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35576154
Ozzy The Terrible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Запуск команды:
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
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35576166
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Oracle - 0. И это правильно.

--
RemObjects AnyDAC 2.0 / 1.12
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35576532
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в оракле она вызовет даже ошибку т.к. нет from
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35576535
Ozzy The Terrible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
barrabasв оракле она вызовет даже ошибку т.к. нет from дык добавьте фром дуал, неужто сложно ?
select case when ',005,006,007' like NULL then 1 else 0 end from dual - что возвращает ?
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35576756
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35576788
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 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
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35576802
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnMS SQL жжет

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

Счаз прибежит pkarklin и обнаружится, что у мелкомягких есть ещё
какая-нибудь опция коннекта типа SET ANSI ON, которую надо установить,
чтобы оно таки заработало как у людей... SET ANSI_NULLS ON | OFF, IIRC
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35577065
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozzy The Terribleselect case when ',005,006,007' like NULL then 1 else 0 end
в MS SQL 2005 XE возвращает 1 (единицу)
Здорово похоже на багу. Не должно такого быть ни с какими опциями и ни в какой ситуации.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35577264
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Запуск команды:
>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
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35577648
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sybase sa10, результат 0.
Вообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами. Итого приходим к ситуации, когда результат такой операции будет неопределен или вернее зависеть от конкретной реализации сервера. Несмотря на то, что остальные сревера кроме mssql2005 отработали как-бы верно, но все-равно, использование конструкции в таком виде разработчиком неверно логически.
Вывод - наличие null в объединении обязательно надо проверять через isnull.

Why CORBA is DEAD?
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35577696
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35577936
M&#36;
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вы даёте :-) А почему 0 - это правильно? А что "правильно" должен вернуть запрос
Код: plaintext
select case when ',005,006,007' not like NULL then  1  else  0  end from dual
Тоже 0? А где "правильнее" 0?
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35577960
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M&#36;Тоже 0? А где "правильнее" 0?

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

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

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

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

Что касается сабжа, то уже было сказано, что это бага.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35578179
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 в разных СУБД.
    #35578215
M&#36;
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerP. S. Программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает Я не программист! Просто спорить люблю. Но я прекрасно вижу, что тот, кто ожидает каких-то результатов от использования таких кривостей либо крут, как варёные яйца и использует "специфические реализации", либо двоешник.
Мимопроходящий
помимо этого, есть ещё и неопределенное состояние - адепты M$
И мы гордимся этим! А всем, кто поощряет использование конструкций if 1 <> NULL then ... моё большое "фи"!
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35578224
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, M&#36;!
You wrote on Mon, 06 Oct 08 11:38:17 GMT:

M&#36 M> Я не программист! Просто спорить люблю.ааааа....
в сад, срочно!

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35578303
M&#36;
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
в сад, срочно!
Ухожу :-( Злые вы. И чего накинулись-то? Интеллектом задавить решили? Но я вернусь... Дух M$ не сломить!
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35578332
Микросекунда
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M&#36; пишет:

M> Дух M$ не сломить!

С такого перепугу можно и ... кхм... дух сломать. Или шуй. У кого что.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35578580
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M$ softwarer Ggg_oldВообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами.
Такое впечатление, что в Вашей реальности boolean значение не может быть null
Boolean НЕ может бить ничем, кроме true и false. И с каких пор в Вашей реальности появился тип boolean?Бред В РМ, которую и реализуют РСУБД троичная система счисления

Потому boolean может быть true, false ИЛИ не определено аки null.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35578703
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAБред В РМ, которую и реализуют РСУБД троичная система счисления
Текст до смайлика следовало бы писать с отдельной строки. Как-никак заголовок.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35579146
Ozzy The terrible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
M$всем, кто поощряет использование конструкций if 1 <> NULL then ... моё большое "фи"!
2 M$ : Если это камень в мой огород, то Вы ошиблись адресом. Мне пришлось сопоставлять строку с помощью оператора LIKE с шаблоном, который заранее неизвестен . Он может оказаться корректным (типа '%,005%'), а может оказаться NULL'ом, т.к. сам является результатом некоторого сопоставления (других) таблиц. Вообще-то я накануне отвечал на эту тему

M$Топикстартер написал кривой запрос... (поскипано) И хоть убейте, такой ужас писать меня не заставите Тема топика совсем не про то, как надо и не надо писать запросы. Вас никто и не просил тут показывать своё мастерство.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35579377
M&#36;
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer M$ softwarerТакое впечатление, что в Вашей реальности boolean значение не может быть null
Boolean НЕ может бить ничем, кроме true и false.
Плюньте в лицо тому, кто Вам сказал такую глупость.Georg Boole умер в 1864 году. Плюнуть ему в лицо не смогу не смотря на всё ваше желание.
Ozzy The terrible M$Топикстартер написал кривой запрос... (поскипано) И хоть убейте, такой ужас писать меня не заставите Тема топика совсем не про то, как надо и не надо писать запросы. Вас никто и не просил тут показывать своё мастерство.Это была попытка самозащиты, перевести стрелки, без обид. Может быть, это дело вкуса, я старался донести мысль, что все условия лучше привести к булевскому виду, тем более, что такие возможности есть, и есть они, наверное, вовсе не потому, что "программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает" (с).
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35579993
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Текст до смайлика следовало бы писать с отдельной строки. Как-никак заголовок.Спасибо, теперь исправленный вариант.


В Реляционной алгебре, которую и реализуют Реляционные СУБД троичная система исчисления
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35580258
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA[quot softwarer]
В Реляционной алгебре, которую и реализуют Реляционные СУБД троичная система исчисления
Троичная система исчисления (это в которой циферки 0,1,2) и даже двоичная (эта в которой циферки 0,1) это совсем не тоже самое, что многозначная логика.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35580465
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркТроичная система исчисления (это в которой циферки 0,1,2)
Не обязательно, кстати. По мне красивей та, в которой цифирки -1, 0 и 1.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35580565
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Локшин МаркТроичная система исчисления (это в которой циферки 0,1,2)
Не обязательно, кстати. По мне красивей та, в которой цифирки -1, 0 и 1.
Ну для устного счета мне привычнее несимметричная...
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35582352
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркТроичная система исчисления (это в которой циферки 0,1,2) и даже двоичная (эта в которой циферки 0,1) это совсем не тоже самое, что многозначная логика.Но многозначная логика также и " 0,1, 2, 3, 4 " И " 0, -1, -2, 1, 2, 3 " (цифры от балды)

А как правильнее тогда назвать логику: 0, 1, unknown ???
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35582808
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAА как правильнее тогда назвать логику: 0, 1, unknown ???
Вы неправильно ставите цифирки. Логика "0, 1, unknown" - это на самом деле логика "0, unknown, 1", и на самом деле это логика "0, 1, 2".
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35583264
Ozzy The Terrible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerЛогика "0, 1, unknown" - это на самом деле логика "0, unknown, 1", и на самом деле это логика "0, 1, 2" -- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown и т.п. Имхо, не зря стали обозначать эту самую "третью циферку" НЕ в виде арабской цифры, а в виде буквенного литерала.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35583362
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozzy The Terrible-- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown
Плюньте в лицо тому, кто Вам сказал такую глупость.

Код: plaintext
1.
2.
3.
4.
5.
6.
false = 0
unknown = 1
true = 2

Операцию AND (a, b) определяем как min (значение_а, значение_b)
Операцию OR  (a, b) определяем как max (значение_а, значение_b)
Операцию NOT (a) определяем как (2 - значение_а)

С любопытством жду примеров исключения из правил.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35583455
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Ozzy The Terrible-- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown
Плюньте в лицо тому, кто Вам сказал такую глупость.

Код: plaintext
1.
2.
3.
4.
5.
6.
false = 0
unknown = 1
true = 2

Операцию AND (a, b) определяем как min (значение_а, значение_b)
Операцию OR  (a, b) определяем как max (значение_а, значение_b)
Операцию NOT (a) определяем как (2 - значение_а)

С любопытством жду примеров исключения из правил.

зач о т
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35584115
Ozzy The Terrible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, я неправильно выразил первую мысль: прочитал фразу "Троичная система исчисления (это в которой циферки 0,1,2)" [цитирую Локшина Марка] и выделил для себя именно слова "система счисления", т.е. "алфавит" для выражения любых чисел. Вот и хотел сказать, что набор {0, unknown, 1} не предназначен для выражения через него какого-либо числа вообще, т.к. применяется совершенно для других целей, а именно для вычисления логич. выражений.

авторС любопытством жду примеров исключения из правил. от меня не ждите ; я знаю про эту аналогию (читал не то у Селко, не то в книге "Задачи по SQL" С.И. Моисеенко, не помню точно).
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35584706
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerС любопытством жду примеров исключения из правил.Ну исключений не будет, а вот критика такого подхода...
У Ozzy The Terrible операции описываются очень простой таблицей (он правда не привел ее полностью, но думаю, что каждый может нарисовать), а у вас подход чрезвычайно сложный. Для того, чтобы описать такие элементарные операции, как OR, AND, NOT потребовалось
а) ввести отношение порядка
б) определить операции min и max
в) ввести операцию вычитания
Очень уж нерационально, хотя изоморфный алгебраический объект мы несомненно получим.
У вашего подхода преимущество только в том, что он допускает простое обобщение на случаи совсем уж многозначных логик вплоть до "нечеткой" логики, где множество допустимых значений континуально.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586044
MGR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerP. S. Программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает

Не так
1. Программист понимает троичную логику
2. Программист не понимает троичную логику
3. Не определено

:)
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586339
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MGRНе так
1. Программист понимает троичную логику
2. Программист не понимает троичную логику
3. Не определено

:)
Это формулировка для тех, кому все надо разжевывать :)
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586443
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FALSE AND NULL = FALSE

Почему так приняли, как это можно объяснить?

Что бы ни стояло на месте NULL, что с FALSE-ом не пересекай, не получишь больше чем FALSE?

PS: А потом я задам еще один глупый вопрос.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586469
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Ozzy The Terrible-- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown
Плюньте в лицо тому, кто Вам сказал такую глупость.

Код: plaintext
1.
2.
3.
4.
5.
6.
false = 0
unknown = 1
true = 2

Операцию AND (a, b) определяем как min (значение_а, значение_b)
Операцию OR  (a, b) определяем как max (значение_а, значение_b)
Операцию NOT (a) определяем как (2 - значение_а)

С любопытством жду примеров исключения из правил.Баловство все это ;)

исходя из ваших правил: false AND unknown должно давать ответ false, тогда !(false AND unknown) должно выдать true . Ваш предпочитаемый сервер Oracle в хранимке выдает другой результат:

Наполнение БД для получения значения NULL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE "NULL_TABLE" 
   (	"NULL_COLUMN" NUMBER(*, 0 )
   );
   
INSERT INTO "NULL_TABLE" VALUES(null);

select * from NULL_TABLE;

NULL_COLUMN            
---------------------- 
                       

 1  rows selected

Сама процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
CREATE OR REPLACE
PROCEDURE TEST_NULL AS
  cnumber number;
  abit boolean;
  cursor c1 is
  select null_column
  from null_table;
BEGIN
  open c1;
  fetch c1 into cnumber;
  
  -- Тут по вашей логике в abit должно быть false.
  -- сравнивать можно с любым числом поскольку в cnumber находится null.
  abit := (cnumber =  1 );
  
  if abit then
    dbms_output.put_line('true');
  else
    dbms_output.put_line('false');
  end if;
  
  --если было false, то должно стать true.
  abit := NOT abit;
  
  if abit then
    dbms_output.put_line('true');
  else
    dbms_output.put_line('false');
  end if;
  
  close c1;
END TEST_NULL;

Результат:
Код: plaintext
1.
2.
3.
4.
Connecting to the database localhost ***.
false
false
Process exited.
Disconnecting from the database localhost ***.
Получаем что и abit и NOT abit дает false!

PS Меня на дисциплинах по базам данных учили, что любой сравнение с unknown дает unknown. для логических выражений типа case, where и подобных unknown трактуется как NOT TRUE .
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586479
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Н-дас... хотел разгромить оппонента, но не получилось... softwarer похоже прав, по крайней мере для Oracle.

Некоторые доработки хранимки дают интересный результат.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
BEGIN
  open c1;
  fetch c1 into cnumber;
  
  abit := (cnumber =  1 ) AND ( 1  =  0 );
  
  if abit then
    dbms_output.put_line('true');
  else 
    --если было false, то должно стать true.
    --abit := NOT abit;
    if NOT abit then
      dbms_output.put_line('false');
    else
      dbms_output.put_line('unknown');
    end if;
  end if;
  
  close c1;
END TEST_NULL;

Заменив расчет abit := (cnumber = 1); на abit := (cnumber = 1) AND (1 = 0);
получаем false вместо unknown


я в печали. нужно попытаться проверить для других СУБД.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586560
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAPS Меня на дисциплинах по базам данных учили, что любой сравнение с unknown дает unknown.
AND и OR - это не сравнения.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586566
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatПочему так приняли, как это можно объяснить?
Это удобно.

LeXa NalBatЧто бы ни стояло на месте NULL, что с FALSE-ом не пересекай, не получишь больше чем FALSE?
Да, в том числе поэтому. Правда, эту логику не довели до конца - ноль умножить на нулл будет вовсе не ноль.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586789
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatFALSE AND NULL = FALSE

Почему так приняли, как это можно объяснить?

Что бы ни стояло на месте NULL, что с FALSE-ом не пересекай, не получишь больше чем FALSE?

PS: А потом я задам еще один глупый вопрос.
не так
FALSE AND NULL = NULL
а if работает только когда TRUE
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586809
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПравда, эту логику не довели до конца - ноль умножить на нулл будет вовсе не ноль.да, собственно, этот вопрос я и хотел после поднять.

SergSuperне так
FALSE AND NULL = NULL
а if работает только когда TRUEв постгресе FALSE AND NULL = FALSE

http://www.postgresql.org/docs/8.3/static/functions-logical.html
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35586950
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperне так
FALSE AND NULL = NULL
Не так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SQL> declare
   2   
   3     procedure print (caption varchar2, value boolean) is
   4     begin
   5       if value then
   6         dbms_output.put_line (caption || ' = true');
   7       elsif not value then
   8         dbms_output.put_line (caption || ' = false');
   9       elsif value is null then
  10         dbms_output.put_line (caption || ' = null');
  11       else
  12         dbms_output.put_line (caption || ' = ????');
  13       end if;
  14     end;
  15   
  16   begin
  17     print ('true and null', true and null);
  18     print ('false and null', false and null);
  19     print ('true or null', true or null);
  20     print ('false or null', false or null);
  21   end;
  22   /

true and null = null
false and null = false
true or null = true
false or null = null

PL/SQL procedure successfully completed
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35587004
агу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperне так
FALSE AND NULL = NULL
Википедия : Unknown^False -> False
То есть, что бы ни стояло на месте Unknown, при конъюнкции это может стать только ложью.
...
Рейтинг: 0 / 0
Странность при сопоставлении: <string> LIKE null в разных СУБД.
    #35587264
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, чё-то я не подумавши написал...
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Странность при сопоставлении: <string> LIKE null в разных СУБД.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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