Имя: Пароль:
1C
 
Как обманчивы Null-ы
0 mista2009
 
22.12.08
12:21
ВЫБРАТЬ
   ВЫБОР
       КОГДА NULL <> NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле1,
   ВЫБОР
       КОГДА NULL = NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле2,
   ВЫБОР
       КОГДА 1 <> NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле3,
   ВЫБОР
       КОГДА 1 = NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле4
1 Defender aka LINN
 
22.12.08
12:23
(0) Я бы на твоем месте не торопился выпячивать свое незнание элементарных вещей.
2 mista2009
 
22.12.08
12:24
(1) Уважаемый ткните носом в документацию. Номер страницы пожалуйста подскажите.
3 Всеяд
 
22.12.08
12:26
(1) + 1

(2)
"Важно! Любая операция сравнения двух значений, в которой участвует хотя бы одно значение NULL, дает результат, аналогичный значению ЛОЖЬ.", Конфигуратор 1С:Предприятие 8.1
Логические выражения в языке запросов
4 mista2009
 
22.12.08
12:28
(3) Закиньте запрос в консоль уважаемые, не поленитесь, много нового откроете :)
5 Defender aka LINN
 
22.12.08
12:29
6 Cheater
 
22.12.08
12:29
(4) а вникнуть в (3)?
7 Широкий
 
22.12.08
12:29
мдя... NULL или ЕСТЬ NULL или НЕ ЕСТЬ NULL
8 Defender aka LINN
 
22.12.08
12:30
(4) Ничего нового не открыл
9 КонецЦикла
 
22.12.08
12:32
(4)

select case when null = null then
   0
   else
   case when null <> null then
   1
   else
   2
end
end

Возвращает 2
Куда дальше копать?
Как жить?
10 Megas
 
22.12.08
12:32
Вообще на бред твой запрос похож... что ты этим пытаешся сделать?
Вообще попробуй так

ВЫБОР
КОГДА ЕстьNULL(ТвойПоле,0) <> 0
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
КОНЕЦ КАК Поле1,
11 Megas
 
22.12.08
12:33
Или пиши что сделать хош... тебе напишу как.
12 DeoxyS
 
22.12.08
12:35
ну в (5) же написали выражение вида IF <что-то> = NULL THEN <действие1> ELSE <действие2> END IF всегда будет приводить к выполнению действия2
13 mista2009
 
22.12.08
13:19
Продолжим тему обманчивых Null-ов  :)

А что уважаемы скажут по этому поводу

ВЫБРАТЬ
   ВЫБОР
       КОГДА НЕ (NULL = NULL)
           ТОГДА ИСТИНА
       ИНАЧЕ ЛОЖЬ
   КОНЕЦ КАК Поле2

(3) не работает!
14 КонецЦикла
 
22.12.08
13:21
(13) Хватит тупить и пугать нас сложными конструкциями
15 Defender aka LINN
 
22.12.08
13:22
(13) Ты дурной? В (3) русским по белому написано "ЛЮБАЯ"
16 mista2009
 
22.12.08
13:22
null=null будет ложь?
не ложь будет истина

почему не то выдаёт?
17 Господин ПЖ
 
22.12.08
13:22
>>А что уважаемы скажут по этому поводу

>>КОГДА НЕ (NULL = NULL)

дурак штоле?
18 vde69
 
22.12.08
13:23
(13) NULL  - это НЕ тип данных вообще!!!
в запросе есть единственый оператор который осуществляет проверку "Есть NULL"

все другие попытки работы с "остутствием описания данных" неправильные
19 Андрюха
 
22.12.08
13:24
Дайте, дайте мне тож пнуть! Эх, не успел... ((((
20 mista2009
 
22.12.08
13:28
Наивные чукотские парни, ктонить 16 посмотрел?
21 Defender aka LINN
 
22.12.08
13:29
(16), (20) Ссылку читали?
"Любая операция сравнения с NULL (даже операция «NULL = NULL»), даёт в результате значение «неизвестность» (UNKNOWN). Окончательный результат при этом зависит от полного логического выражения в соответствии с таблицей истинности логических операций. Если сравнение с NULL есть вся логическая операция целиком (а не её часть), то результат её аналогичен FALSE (выражение вида IF <что-то> = NULL THEN <действие1> ELSE <действие2> END IF всегда будет приводить к выполнению действия2)." - какие еще вопросы могут быть?
22 Лефмихалыч
 
22.12.08
13:30
(20) сам-то проверял?
23 Широкий
 
22.12.08
13:30
(20) Пипец.. считай что генирируется исключение- которое отображается как ЛОЖЬ
24 Лефмихалыч
 
22.12.08
13:31
(21) бесполезно - там подписи Нуралиева нет, - (0) не поверит
25 hhhh
 
22.12.08
13:32
(20) тебе же сказали операции "=" у типа NULL нет.

по твоей команде срабатывает Попытка ... Исключение, причем в исключении всегда стоит ложь, какое бы ты логическое выражение не наваял.

Пиши правильно NULL ЕСТЬ NULL
26 ХочуВойти
 
22.12.08
13:34
нету тут улю 427...
27 mista2009
 
22.12.08
13:40
(21) Любая операция сравнения с NULL (даже операция «NULL = NULL»), даёт в результате значение «неизвестность»

У меня же конкретное значение выдаёт:  NULL = NULL - ложь
28 HEKPOH
 
22.12.08
13:41
(0),(13) Мде, вот к чему приводит незнание основ. Это не наезд - это констатация факта
29 HEKPOH
 
22.12.08
13:42
(27) в 1С не используют UNKNOWN. Читай букварь
30 NcSteel
 
22.12.08
13:43
(27) Тебе уже много раз объяснили что к чему.
31 NcSteel
 
22.12.08
13:43
(29) Еще один (
32 Defender aka LINN
 
22.12.08
13:44
(27) Мда, медицина тут бесполезна...
Если ты видишь булево значение в результате запроса, это не значит, что в самом запросе это булево. Представление(Значение) в результате тебе даст строку, "1" + Представление(Значение) - ошибку. Элементарные вещи.
33 hhhh
 
22.12.08
13:44
(27) в дальнейшем сверяйся с таблицей

NULL = NULL                  =ЛОЖЬ
НЕ (NULL=NULL)               =ЛОЖЬ
НЕ (НЕ (NULL = NULL))        =ЛОЖЬ
НЕ (НЕ (НЕ (NULL = NULL)))   =ЛОЖЬ

...
34 HEKPOH
 
22.12.08
13:47
(31) с этого места подробнее, пожл
35 ХочуВойти
 
22.12.08
13:47
(33) Гыыы...
36 mista2009
 
22.12.08
14:05
(25) Мысль интересная, ты где такое вычитал. Не в ЖКК же?
37 vde69
 
22.12.08
20:17
даю подписаное Нуралиевым
http://v8.1c.ru/predpriyatie/typical_problems_Req.htm

Почему в запросе не работает сравнение <Выражение> = NULL?
Если в запросе есть необходимость проанализировать значение некоторого выражения на равенство NULL, следует использовать не операции сравнения (=, <>), а специальный оператор проверки значения выражения на равенство NULL, имеющий следующий синтаксис:

<Выражение> ЕСТЬ [НЕ] NULL

Например:

ВЫБРАТЬ
Номенклатура.Наименование,
Номенклатура.НомерГТД
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
((Номенклатура.НомерГТД) ЕСТЬ НЕ NULL )

Если же в этом запросе вместо конструкции ЕСТЬ НЕ использовать операцию сравнения (<>), то это приведет к тому, что записи отбираться не будут.

Следует отметить, что, несмотря на то, что при сравнении значений разных типов определен приоритет типов (NULL, булево, число, дата, строка, ссылка), подобное сравнение имеет смысл для всех типов, кроме NULL. Наличие типа NULL в этой иерархии необходимо лишь для того, чтобы обеспечить упорядочивание записей результата запроса в соответствии с порядком, заданным в предложении УПОРЯДОЧИТЬ ПО.
38 nbIx
 
22.12.08
20:37
(37) так точно, очень удивлен, что уже настрочили 36 постов...
39 ShoGUN
 
22.12.08
21:00
Бу-га-га :)))
(36) Отвлекись от 1c и попробуй в скуле то же самое провернуть.
И запиши (33), а то забудешь...
40 mista2009
 
22.12.08
21:16
Наивные чукотские парни в (37) НЕТ объяснения (16)

(38)(39) Мы готовы внимательно заслушать вашу теорию по поводу (16)
41 0xFFFFFF
 
22.12.08
21:39
Если
Непонятьчё сравнить с Непонятьчё получим тоже Непонятьчё
Если делать отрицание этого
Не (Непонятьче сравнить с Непонятьчё) то будет тоже непонятьче.
Че непонять?
42 0xFFFFFF
 
22.12.08
21:41
NULL = NULL                  =ЛОЖЬ
НЕ (NULL=NULL)               =ЛОЖЬ
НЕ (НЕ (NULL = NULL))        =ЛОЖЬ
НЕ (НЕ (НЕ (NULL = NULL)))   =ЛОЖЬ


Ничего удивительного.
43 mista2009
 
22.12.08
21:51
(41) Если Непонятьчё это Null, то по твоей теории получается следующее

Null=Null = Null
Not (Null=Null)=Null

:)
44 Defender aka LINN
 
22.12.08
21:56
(41) Я ж говорю - медицина бесполезна.
(43) (NULL=NULL) - ни разу не равно Ложь. Оно равно Unknown. Not unknown, как ни странно равно ему же.
Истина ИЛИ (NULL=NULL) даст Истина. Так что звиздуй-ка ты на Чукотку, аборигенов просвещать.
45 ShoGUN
 
22.12.08
22:17
Развод?
46 0xFFFFFF
 
22.12.08
22:26
(43)
Мы можем утверждать, что два неопределенных значения равны между собой?
Нет, значит ЛОЖЬ.
Мы можем утверждать, что два неопределенных значения не равны между собой?
Нет, значит ЛОЖЬ.
47 Immortal
 
22.12.08
22:57
(33) Аааааа. падстолом=)
49 mista2009
 
22.12.08
23:27
Пока вырисовывается две теории объяснения (16):
- Это теория Unknown (44)
- Теория Исключения (23)(25)

Ждём ещё теорий.
51 Fragster
 
гуру
22.12.08
23:29
(50)+ причем это - как бойль-мариотт...
52 MRAK
 
22.12.08
23:38
(0) на PL/SQL попробуй подобное написать... больше глупых вопросов не возникнет..
53 vde69
 
модератор
23.12.08
00:47
(49) я тебе давал ссылку на первоисточник, не хочеш верить не надо! а сейчас ты как фиксин ведешь себя. (тот-же стиль)

если не веришь 1с, то даю другое обьяснение:

SQL хранит данные страницами, на странице может быть 1 или несколько строк таблицы, данные записаны в странице в последовательности "тип"-"данные" причем длина одного поля может быть переменная. Так вот NULL - это когда на странице для поля(шапки) вообще нету определения "тип" и нету "данных", тоесть когда поле должно быть а его физически нету.

с точки зрения математики это можно представить как функцию стремящуюся к 0 и не имеющего в 0 значения, (бесконечно малое число), так вот сравни теперь их:
с одной стороны они ни когда не равны (по сколько бесконечно изменяються) а с другой стремяться к 0


А вообще не иди по стопам фиксина, нам его одного слишком хватает. :)
54 Стрелок
 
23.12.08
02:57
даже я понял с первого раза. а я в 8-ке полный ноль....