Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Ozzy The Terrible
Guest
Всем привет.
Запуск команды:
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 (ноль).

В оракле не проверял, лень тратить время на скачку и установку.
Проверьте, плз, на своих СУБД - у кого какой результат ?
4 окт 08, 11:33    [6265049]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9993
В Oracle - 0. И это правильно.

--
RemObjects AnyDAC 2.0 / 1.12
4 окт 08, 11:58    [6265074]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
barrabas
Member

Откуда: от махмуда
Сообщений: 10524
в оракле она вызовет даже ошибку т.к. нет from
5 окт 08, 00:33    [6266128]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Ozzy The Terrible
Guest
barrabas
в оракле она вызовет даже ошибку т.к. нет from
дык добавьте фром дуал, неужто сложно ?
select case when ',005,006,007' like NULL then 1 else 0 end from dual - что возвращает ?
5 окт 08, 00:49    [6266158]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

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

5 окт 08, 15:14    [6266625]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Favn
Member

Откуда:
Сообщений: 585
В 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 жжет
5 окт 08, 16:54    [6266692]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54751

Favn
MS SQL жжет

Счаз прибежит pkarklin и обнаружится, что у мелкомягких есть ещё
какая-нибудь опция коннекта типа SET ANSI ON, которую надо установить,
чтобы оно таки заработало как у людей...

Posted via ActualForum NNTP Server 1.4

5 окт 08, 17:23    [6266717]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Hallween
Member

Откуда: Москва
Сообщений: 170
Имхо, сравнивать какое-либо выражение с null при помощи like это ... хм.. странно, мягко говоря
5 окт 08, 17:33    [6266722]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Ozzy The Terrible
Guest
Hallween
Имхо, сравнивать какое-либо выражение с null при помощи like это ... хм.. странно, мягко говоря
почему ? идёт сопоставление данных двух табличек, в одной записаны "нормальные" строки типа ',003,005,007,009' etc, а во второй - шаблоны типа '%,005%,007%'. Но шаблоны эти сами тоже являются результатом некоторого сопоставления и могут оказаться null'ами. Что странного Вы видите ?
5 окт 08, 17:41    [6266726]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Hallween
Member

Откуда: Москва
Сообщений: 170
автор
Что странного Вы видите ?

Для сравнения с null существует оператор IS [NOT] NULL, предусмотренный стандартом ANSI. Все остальное от лукавого, имхо
5 окт 08, 17:48    [6266731]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
hvlad
Member

Откуда:
Сообщений: 11551
Dimitry Sibiryakov

Favn
MS SQL жжет

Счаз прибежит pkarklin и обнаружится, что у мелкомягких есть ещё
какая-нибудь опция коннекта типа SET ANSI ON, которую надо установить,
чтобы оно таки заработало как у людей...
SET ANSI_NULLS ON | OFF, IIRC
5 окт 08, 23:12    [6267136]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67377
Блог
Ozzy The Terrible
select case when ',005,006,007' like NULL then 1 else 0 end
в MS SQL 2005 XE возвращает 1 (единицу)

Здорово похоже на багу. Не должно такого быть ни с какими опциями и ни в какой ситуации.
5 окт 08, 23:19    [6267141]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
>Запуск команды:
>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

6 окт 08, 09:18    [6267532]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
Sybase sa10, результат 0.
Вообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами. Итого приходим к ситуации, когда результат такой операции будет неопределен или вернее зависеть от конкретной реализации сервера. Несмотря на то, что остальные сревера кроме mssql2005 отработали как-бы верно, но все-равно, использование конструкции в таком виде разработчиком неверно логически.
Вывод - наличие null в объединении обязательно надо проверять через isnull.

Why CORBA is DEAD?
6 окт 08, 11:48    [6268361]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
select @@version
select case when ',005,006,007' like NULL then 1 else 0 end



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


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!
6 окт 08, 11:59    [6268433]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
M&#36;
Guest
Ну вы даёте :-) А почему 0 - это правильно? А что "правильно" должен вернуть запрос
select case when ',005,006,007' not like NULL then 1 else 0 end from dual
Тоже 0? А где "правильнее" 0?
6 окт 08, 13:09    [6268949]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54751

M&#36;
Тоже 0? А где "правильнее" 0?

Да, тоже 0. И правильнее он будет в обеих случаях. Добро пожаловать в
мир троичной логики.

Posted via ActualForum NNTP Server 1.4

6 окт 08, 13:17    [6269015]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
M&#36;
Guest
Это двойные стандарты, а не троичная логика. Топикстартер написал кривой запрос, а народ обрадованно захлопал в ладошки, ещё бы - бага в блестящем и неповторимом MSSQL! Любой результат неверен. И хоть убейте, такой ужас писать меня не заставите. Даже если голосованием решим, что 0 - это всё-таки правильная фича :-)

Для топикстартера напишу, что в Оракле есть такая вещь, как nvl. Думаю, что и в блестящем и неповторимом тоже имеется что-то подобное.
6 окт 08, 14:08    [6269368]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67377
Блог
Ggg_old
Вообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами.

Такое впечатление, что в Вашей реальности boolean значение не может быть null
6 окт 08, 14:09    [6269376]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67377
Блог
M$
И хоть убейте, такой ужас писать меня не заставите.

В качестве эксперимента: каково Ваше отношение к идее вставить в каждую таблицу по специальной "пустой" записи с id = 0 и сделать все внешние ключи not null?
6 окт 08, 14:11    [6269383]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
M&#36;
Guest
softwarer
Ggg_old
Вообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами.

Такое впечатление, что в Вашей реальности boolean значение не может быть null

Boolean НЕ может бить ничем, кроме true и false. И с каких пор в Вашей реальности появился тип boolean?
6 окт 08, 14:14    [6269395]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67377
Блог
M$
softwarer
Такое впечатление, что в Вашей реальности boolean значение не может быть null

Boolean НЕ может бить ничем, кроме true и false.

Плюньте в лицо тому, кто Вам сказал такую глупость.

M$
И с каких пор в Вашей реальности появился тип boolean?

Вы не понимаете разницы между "типом boolean" и "boolean значением"?
6 окт 08, 14:16    [6269413]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67377
Блог
P. S. Программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает
6 окт 08, 14:18    [6269423]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
M$
Boolean НЕ может бить ничем, кроме true и false. И с каких пор в Вашей реальности появился тип boolean?


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

Что касается сабжа, то уже было сказано, что это бага.
6 окт 08, 14:28    [6269509]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32882

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

6 окт 08, 14:28    [6269512]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить