На скольких языках Null не равно ничему, даже не Null?

На скольких языках Null не равно ничему, даже не Null?

Не язык, но NaN с плавающей запятой тоже не равен самому себе.

Joren 07.11.2010 20:19
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
7
1
1 713
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Oracle такой.

SELECT * FROM dual WHERE NULL=null;  --no rows returned

На самом деле, это свойство SQL в целом, а не только Oracle.

sleske 22.03.2010 13:24
Ответ принят как подходящий

Так обстоит дело в SQL (как языке логики), потому что null означает неизвестное / неопределенное.

Однако в языках программирования (например, C++ или C#) нулевой указатель / ссылка - это конкретное значение с определенным значением - ничего.

Два ничего эквивалентны, но два неизвестных - нет. Путаница возникает из-за того, что для обеих концепций используется одно и то же имя (null).

Есть находятся некоторые языки программирования с нулевым распространением. Например VB.Net msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx

MarkJ 08.03.2010 15:18

MySQL имеет нулевой безопасный оператор равенства, <=>, который возвращает истину, если обе стороны равны или обе стороны равны нулю. См. Документы MySQL.

+1 Интересно, но это, наверное, должен был быть комментарий к ответу SQL

Willbill 14.10.2009 15:17

Вы можете заставить рубин работать таким образом:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null

@Hugh: Ну, можно так сказать, но это является возможно, а это значит, что люди будут это делать ... хорошо это или плохо - другой вопрос.

sleske 22.03.2010 13:25

В ruby ​​значение null называется nil, а значение NULL не определяется при отправке кода. Однако вполне возможно сделать то, что здесь подразумевается, набрав: class NilClass; def ==(o); false; end; end

einarmagnus 08.11.2010 00:16

Вау @ormuriauga - вы поймали опечатку двухлетней давности. Фиксированный. Теперь он создает Null, который не равен самому себе, как задан вопрос.

AShelly 08.11.2010 20:58

В VB6 выражение Null = Null будет производить Null вместо True, как и следовало ожидать. Это вызовет ошибку времени выполнения, если вы попытаетесь назначить его логическому типу, однако, если вы его используете в качестве условия «If ... Then» он будет действовать как False. Кроме того, Null <> Null будет также производим Null, поэтому:

В VB6 можно сказать, что Null не равен себе (или чему-либо еще) и не неравен!

Вы должны проверить это с помощью функции IsNull().

VB6 также имеет другие особые значения:

  • Nothing для объектных ссылок. Nothing = Nothing - ошибка компиляции. (вы должны сравнивать это, используя "is")
  • Missing для необязательных параметров, которые не были указаны. У него нет буквального представления, поэтому вы даже не можете написать Missing = Missing. (тест IsMissing(foo))
  • Empty для неинициализированных переменных. Этот тестирует себя, хотя есть также, функция IsEmpty().
  • ... дайте мне знать, если я забыл один

Я помню, как мне немного противно VB.

VB.Net также имеет нулевое распространение. Нулевое распространение сбивает с толку, но если у вас вообще будут типы, допускающие значение NULL, можно утверждать, что кошка вышла из мешка, и вам следует распространять NULL. msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx

MarkJ 08.03.2010 15:19

В C# Nullable <bool> имеет интересные свойства по отношению к логическим операторам, но оператор равенства такой же, как и другие типы в этом языке (т. Е. ((Bool?) Null == (bool?) Null) == true) .

Чтобы сохранить поведение короткозамкнутый короткозамкнутых логических операторов и сохранить согласованность с не короткозамкнутыми логическими операторами, логическое значение, допускающее значение NULL, имеет некоторые интересные свойства. Например: true || null == true. false && null == false и т. д. Это находится в прямом противоречии с другими языками трехзначной логики, такими как ANSI SQL.

В C# есть и другие интересные особенности. Для некоторых значений x и y x==y верно, но x<=y неверно. Что, кажется, довольно сложно защитить. msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx

MarkJ 08.03.2010 15:22

В SQL вам нужно будет сделать что-то вроде:

WHERE column is NULL

скорее, чем

WHERE column = NULL

Другие вопросы по теме