Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не понятный результат выборки запроса  [new]
jonybest
Member

Откуда:
Сообщений: 258
Доброго дня!
есть простой запрос
SELECT *
FROM
  dbo.vGetTasksList vtl
WHERE
  vtl.IMEI <> 'Д' 


При выполнении запроса отбираются только строки с не пустым значением vtl.IMEI. Чтобы вывести все данные приходиться добавлять
( vtl.IMEI <> 'Д' or
   vtl.IMEI is null) 

Не пойму почему? как с этим бороться?
28 июл 16, 14:07    [19467585]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
jonybest,
а зачем с этим бороться?
а вообще, бороться с определением что такое NULL и как с ним сравнивают. Про ANSI NULL луче не читать :)
28 июл 16, 14:09    [19467597]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
jonybest
Не пойму почему? как с этим бороться?
Надо почитать про NULL. И троичную логику.
К NULL надо применять IS NULL или IS NOT NULL.
NULL <> 'Д' вернёт UNKNOWN. А WHERE пропускает только TRUE.
28 июл 16, 14:10    [19467606]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Потому что.
28 июл 16, 14:10    [19467609]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
jonybest
Member

Откуда:
Сообщений: 258
Может я не правильно выразил свою мысль
vtl.IMEI тип varchar
vtl.IMEI в таблице может быть пустым
Мне нужно чтобы запросом убрать из таблицы строки с значением vtl.IMEI= 'Д'
Вместо этого запрос кроме vtl.IMEI= 'Д' убирает и vtl.IMEI=NULL
Как с этим бороться?
28 июл 16, 14:21    [19467703]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
jonybest
Может я не правильно выразил свою мысль
vtl.IMEI тип varchar
vtl.IMEI в таблице может быть пустым
Мне нужно чтобы запросом убрать из таблицы строки с значением vtl.IMEI= 'Д'
Вместо этого запрос кроме vtl.IMEI= 'Д' убирает и vtl.IMEI=NULL
Как с этим бороться?
Я даже не знаю, что добавить
Вроде всё разжевали и даже в рот положили.
Не нравится OR vtl.IMEI IS NULL? А почему, можно полюбопытствовать?
Приколитесь так:
WHERE NOT EXISTS(SELECT vtl.IMEI INTERSECT SELECT 'Д')
28 июл 16, 14:26    [19467736]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
jonybest
Как с этим бороться?
"Солнце встает каждый день в одном месте, а мне надо, чтобы в другом. Как с этим бороться?"
28 июл 16, 14:31    [19467777]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
o-o
Guest
Гавриленко Сергей Алексеевич
jonybest
Как с этим бороться?
"Солнце встает каждый день в одном месте, а мне надо, чтобы в другом. Как с этим бороться?"

слишком просто.
пялиться на солнце через зеркало (нужное число зеркал отразит куда хочешь)
и самообманываться
28 июл 16, 14:47    [19467905]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
jonybest,

null - это не "пусто", это "неизвестно что". "пусто" - это конкретное значение значение.
28 июл 16, 16:55    [19468962]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
o-o
Guest
в особо тяжелых случаях NULL тоже весьма конкретное значение.
недавно вычищали таблицу, куда продвинутые юзеры вписали закавыченный NULL в строковое поле.
такое никакой IS NULL не берет
менее продвинутые пользователи собрались вокруг компа в кучку и наблюдали очевидное невероятное.
пока один из них не заметил, что почему-то в студии на панели результатов NULL того же цвета, что и обычные значения
28 июл 16, 17:09    [19469061]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o,
автор
недавно вычищали таблицу, куда продвинутые юзеры вписали закавыченный NULL в строковое поле.

а имхо нифига не юзеры, а в интерфес в текстовое поле им нулл выбивало, а дальше сохранило как текстовое
28 июл 16, 17:20    [19469135]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
o-o
Guest
TaPaK
o-o,
автор
недавно вычищали таблицу, куда продвинутые юзеры вписали закавыченный NULL в строковое поле.

а имхо нифига не юзеры, а в интерфес в текстовое поле им нулл выбивало, а дальше сохранило как текстовое

да я даже фамилии знаю, но не стану называть
а еще одна тоже продвинутая, да еще и IT,
когда начальница в отпуске была, запустила ее крутую процедуру "отработать со строки нимер" с параметром NULL,
тоже закавычив его.
а там логика была такая: если вменяемый номер, то с него запустить, если налл, то с самого начала.
а номера строк тоже ж не номера, а строки ("чтобы непосвященные не догадались")
проца тут же и навернулась на этой супер-строке ,
ибо из строки выцеплялся реальный номер, а тут его не было.
ох щас поищу тот гениальный код,
чтоб все смогли заценить неординарность бывшей начальницы
28 июл 16, 17:37    [19469243]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
o-o
Guest
учитесь пудрить мозги, товарищи.
она подозревала, что однажды ее сместят.
поэтому процедуры писала только лично.
они работали, но черт ногу сломит, да.
типа "когда они не смогут это все контролировать, все прибегут ко мне".
на тот момент она еще царствовала, но ушла в отпуск, так что прибежали ко мне.
вызов процы не показали,
прислали только текст ошибки:
error
Conversion failed when converting the varchar value 'ull' to data type int.

вот супер-текст.
после того, как посылается на нужную метку, там все еще запутаннее:
create proc ...
   @ripartenza_codice_ext varchar(5) 
as
...
IF @ripartenza_codice_ext is null 
   OR (    @ripartenza_codice_ext is not null
       and convert(int,substring(@ripartenza_codice_ext,2,(len(@ripartenza_codice_ext)-1))) < 1000)
   GOTO INIZIO;
--
IF (    @ripartenza_codice_ext is not null
    and convert(int,substring(@ripartenza_codice_ext,2,(len(@ripartenza_codice_ext)-1))) >= 1000)
   GOTO ELABORA_STAGING;
...
28 июл 16, 17:49    [19469316]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o,

ну может у вас только один входящий параметр разрешён и никак не xml, вот и изворачиваются люди )
28 июл 16, 17:52    [19469334]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
o-o
Guest
TaPaK
o-o,

ну может у вас только один входящий параметр разрешён и никак не xml, вот и изворачиваются люди )

чего?
у ней все что угодно было разрешено, лишь бы было понятно ей и непонятно другим.
а в эту конкретную процедуру идет 1 код с номером строки,
просто идет строкой, первый символ это буква, поэтому она его и отрезает.
а вообще конечно не каждая буква, а то так бы все и запускали ее процедуры.
28 июл 16, 17:58    [19469376]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный результат выборки запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o,

автор
она подозревала, что однажды ее сместят.

игры престолов :) может где то ещё страшные закладки под замком сервером понаделала :)
28 июл 16, 18:05    [19469417]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить