|
священный NULL и сложение | ☑ | ||
---|---|---|---|---|
0
Wobland
15.10.12
✎
19:30
|
имеем запрос:
выбрать
в первом случае получаем 20, во втором таки NULL. вопрос: это у только у 1С так? |
|||
1
Aleksey
15.10.12
✎
19:32
|
да
|
|||
2
Aleksey
15.10.12
✎
19:33
|
ибо нет типизации, т.е. типизация идет по первой переменной
|
|||
3
SnarkHunter
15.10.12
✎
19:36
|
нет
|
|||
4
SnarkHunter
15.10.12
✎
19:36
|
В t-sql тоже так
|
|||
5
Wobland
15.10.12
✎
19:37
|
вот, NULL на первом месте
выбрать первые 90
|
|||
6
Wobland
15.10.12
✎
19:39
|
оказывается, NULL не всегда ЕСТЬ NULL? ;)
|
|||
7
Kaidend
15.10.12
✎
19:39
|
Агрегатные функции игнорируют NULL.
Любые арифмитические операции с NULL-ом дают NULL. NULL не равен ничему, кроме нуля. Подозреваю, что это стандарт SQL-92 и такое поведение одинаково во всех СУБД, его придерживающихся. |
|||
8
SnarkHunter
15.10.12
✎
19:39
|
Странные выводы...
|
|||
9
Kaidend
15.10.12
✎
19:39
|
(7) Тьфу, не равен ничему, кроме NULL-а.
|
|||
10
Kaidend
15.10.12
✎
19:40
|
(2) порядок, кстати, в этом случае никакого значения не имеет
|
|||
11
Wobland
15.10.12
✎
19:41
|
(9) да и NULLу, если задуматься, тоже ;)
выбрать выбор когда NULL=NULL тогда истина иначе ложь конец объединить все выбрать выбор когда NULL<>NULL тогда истина иначе ложь конец |
|||
12
Kaidend
15.10.12
✎
19:43
|
(11) ну, в общем, да :)
странно, зачем в SQL ввели отдельную конструкцию IS NULL... |
|||
13
Wobland
15.10.12
✎
19:45
|
перефразирую Кайденда и уйду спать
Агрегатные функции игнорируют NULL. Любые арифметические операции с NULL-ом дают NULL. Любое сравнение с NULLом даёт ложь. Подозреваю, что это стандарт SQL-92 и такое поведение одинаково во всех СУБД, его придерживающихся. всем спасибо, доброй ночи |
|||
14
Aleksey
15.10.12
✎
19:47
|
(13) Нет для этого настройка в скуле есть
|
|||
15
Kaidend
15.10.12
✎
19:48
|
(14) Для чего "этого"?
|
|||
16
Aleksey
15.10.12
✎
19:48
|
(15) Для Null
|
|||
17
Нуф-Нуф
15.10.12
✎
19:48
|
(9) нул и себе не равен
|
|||
18
Aleksey
15.10.12
✎
19:51
|
Для русской параметр называется "Объединение со значением null дает null"
|
|||
19
Kaidend
15.10.12
✎
19:51
|
(17) да, забыл
|
|||
20
Aleksey
15.10.12
✎
19:52
|
А вообще Законы таинственного NULL следующие:
NULL=NULL это False NULL<>NULL это тоже False Единственное, что True, так это: SOMETHING IS NULL |
|||
21
Kaidend
15.10.12
✎
19:53
|
||||
22
rs_trade
24.10.12
✎
17:32
|
(17) всегда?
|
|||
23
Дык ё
24.10.12
✎
18:00
|
(20) на самом деле
NULL=NULL это NULL NULL<>NULL это тоже NULL |
|||
24
Reset
24.10.12
✎
18:03
|
(23) False
|
|||
25
MRAK
24.10.12
✎
18:06
|
(1), (2) не правильно, также работает и pl/sql в оракле
|
|||
26
rs_trade
24.10.12
✎
18:15
|
(23)(24) undefined
|
|||
27
Reset
24.10.12
✎
18:25
|
(26) Недопонял. В запросах 1С выражение null=null имеет вполне определенное булево значение, равно Ложь. Нет?
|
|||
28
Reset
24.10.12
✎
18:25
|
равное*
|
|||
29
Wobland
24.10.12
✎
18:31
|
(27) а приведи пример. возможно, к примеру, соединение по нулл=нулл не соединяет по той причине, что undef молча преобразуется в ложь..
|
|||
30
zakidonoff
24.10.12
✎
18:33
|
(23) (24) (25) (26) (27)
ВЫБОР КОГДА NULL = NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ Возвращает Ложь. Если проверка проходит, значит сравнение возвращает булево значение |
|||
31
Wobland
24.10.12
✎
18:34
|
(30) или молча конвертируется? любая операция с нуллом даёт ложь - читал где-то
|
|||
32
Reset
24.10.12
✎
18:35
|
(29) Это отчасти вопрос был ;)
|
|||
33
zakidonoff
24.10.12
✎
18:36
|
(29) (30)
Если заменить NULL = NULL на неопределено, вылезет ошибка. Автоматом не конвертируется. |
|||
34
Wobland
24.10.12
✎
18:36
|
Любая операция сравнения с NULL (даже операция «NULL = NULL»), даёт в результате значение «неизвестность» (UNKNOWN)
© wiki:NULL_(SQL) но википедия такая википедия. оттуда же: NULL может присваиваться переменным и записываться в поля, независимо от объявленного типа данных этих переменных (полей); |
|||
35
Reset
24.10.12
✎
18:37
|
(30) Темное это дело (хорошо, для меня темное)
ВЫБОР КОГДА НЕ (NULL = NULL) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ тоже истину даст. |
|||
36
rs_trade
24.10.12
✎
18:37
|
(30) нет. получается значение undefined, а оно отбрасывается логикой двоичных предикатов.
по твоей логике код ниже должен возвращать 999 select case when not (null=null) then 999 else 111 end |
|||
37
rs_trade
24.10.12
✎
18:38
|
(34) во, наверное UNKNOWN, а не undefined. уже точно не помню. но суть та же.
|
|||
38
Reset
24.10.12
✎
18:39
|
(34)(36) Хотелось бы остаться в рамках языка запросов 1С, что вне его - я знаю еще хуже ;)
(36) Но ведь "Выбор когда undefined" не пропускает проверка синтаксиса |
|||
39
Reset
24.10.12
✎
18:40
|
(37) В общем, в 1с, получается, нет описывающего результат типа? )
|
|||
40
rs_trade
24.10.12
✎
18:41
|
(38) У языка запросов 1С ноги растут ведь из ANSI-SQL, правда? Поэтому лучше разбираться на примере первоисточника.
|
|||
41
rs_trade
24.10.12
✎
18:47
|
А ведь null бывает еще иногда равен другому null
|
|||
42
Reset
24.10.12
✎
18:49
|
(41) Не мучай мои мозги под вечер ;)
|
|||
43
Wobland
24.10.12
✎
18:50
|
(41) я требую пример!
"NULL"=Прав("ДругойNULL", 4) не считается ;) |
|||
44
Reset
24.10.12
✎
18:53
|
В языке 1С ТипЗнч(null=null) булево кстати
|
|||
45
fisher
24.10.12
✎
18:53
|
Аааа! Только не это! Опять! Сейчас Ненавижу1С накличите на свои головы :)
|
|||
46
zakidonoff
24.10.12
✎
18:56
|
(35) Ложь даст.
Пример лишь демонстрирует, что сравнение NULL = NULL проходит синтаксис условия в запросе. А это возможно только если он дает тип булево. Вот и всё =) С другой стороны, ни один из прочих допустимых типов 1С не преобразуется автоматически в булево. Однако, при попытке напямую задать условие: ВЫБОР КОГДА (NULL = NULL) = ЛОЖЬ ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ Выдает ошибку о том, что нельзя сравнивать значения неограниченной длинны со значениями простых типов. Т.е. веря логике конфигуратора, выходит, что (NULL = NULL) - значение неограниченной длинны =) |
|||
47
rs_trade
24.10.12
✎
18:58
|
(43) таких случаев несколько. например group by считает null-ы равными. order by тоже. еще есть скульная операция над таблицами которает нуллы равными считает. union тоже сворачивает null-ы.
|
|||
48
Reset
24.10.12
✎
19:00
|
(46) да, я хотел сказать ложь, опечатался *-) (то есть "НЕ" не работает).
Впрочем, уважаемые Wobland и rs_trade растолковали, почему. |
|||
49
Reset
24.10.12
✎
19:02
|
(46) Оно говорит что нельзя сравнивать значения несовместимых типов.
То есть, оператор НЕ к несовместимому типу применить можно (хоть получиться хз что), а сравнить с булевым нельзя :) |
|||
50
zakidonoff
24.10.12
✎
19:03
|
(47) Это агрегатные функции, а не простые. По сути они не являются операциями сравнения.
|
|||
51
Reset
24.10.12
✎
19:04
|
КОГДА (Не (NULL = NULL)) = Истина Неверные параметры НЕ
КОГДА (Не (NULL = NULL)) Все типа ок :) |
|||
52
rs_trade
24.10.12
✎
19:06
|
(50) ну и что. в их случае же, нуллы равны между собой получаются.
|
|||
53
Reset
24.10.12
✎
19:07
|
Ладно, ну его нахер, а то ночью приснится
|
|||
54
zakidonoff
24.10.12
✎
19:12
|
(52) Это и так понятно было - в первых сообщениях подробно расписали.
|
|||
55
rs_trade
24.10.12
✎
19:14
|
(54) и таки group by и order by не агрегатные функции.
|
|||
56
1C-band
24.10.12
✎
19:15
|
Обалдели что ли?! Пардон глубочайше за мой французкий...
ЕСТЬNULL(ТвоеЗначение, 0) - и складывай с чем угодно. |
|||
57
zakidonoff
24.10.12
✎
19:21
|
(55) Угу. Это вообще не функции с точки зрения 1С =)
(56) Да понятно всё это. Малина на в том )) |
|||
58
Wobland
24.10.12
✎
19:21
|
(56) это всем понятно, разговор уже о высоких материях
|
|||
59
Гинзбург
24.10.12
✎
19:25
|
20+ NULL
еще не было ? (не скуль) |
|||
60
MRAK
24.10.12
✎
19:29
|
(30) так нельзя
"null есть null" вернет истину |
|||
61
Гинзбург
24.10.12
✎
19:31
|
(60)
1-(null = null) |
|||
62
1Страх
29.10.12
✎
16:53
|
почувствуйте разницу
select sum(A+B), sum(A)+sum(B) from ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |