【问题标题】:NULL == 0 in MySql?MySql中的NULL == 0?
【发布时间】:2014-03-22 11:55:49
【问题描述】:

我使用这样的查询:
SELECT table.field FROM table WHERE table.field > 0
如果table.field 包含NULL 值,WHERE 子句会起作用吗?

【问题讨论】:

  • 如果field 为空,您希望发生什么?是否包含在结果中?
  • 如果field包含NULL则不需要包含
  • 你可以查看SELECT NULL = 0;
  • 您的查询已经这样做了:对于除is nullis not null 之外的任何比较,空值都不正确

标签: mysql null operators where


【解决方案1】:

where 子句将按预期方式工作。几乎所有与NULL 的比较都返回NULL,在where 子句中被视为“假”。

所以,如果值为NULL,所有这些表达式都不会返回任何行:

WHERE table.field > 0
WHERE table.field = 0
WHERE table.field < 0
WHERE table.field <> 0

如果您关心NULL 值,请显式测试它们(使用is nullis not null)或使用coalesce() 之类的函数在字段为NULL 时为字段赋值。

【讨论】:

  • 我们有办法在 MySQL 中将 NULL 转换为布尔值吗?我试过但找不到。
  • @GrijeshChauhan 。 . .你不需要投射它。只需说field is not null,MySQL 就会给出一个布尔结果,如果字段不为空,则为“true”(1),如果字段为空,则为“false”(0)。
  • 好的,我知道了,我试过&gt; SET @a = NULL; SELECT @a is NULL;谢谢!
  • 感谢您的完整回答!
【解决方案2】:

您可以确保这样做。

 SELECT table.field FROM table WHERE table.field > 0
                               AND table.field is not null

【讨论】:

  • -1 is not null 的测试没有增加任何值,因为如果 field 为空,&gt; 0 的原始测试将不正确。
  • 但现在它将返回每个非空行,例如,如果field-1,它将被返回:如果原始测试是针对field &gt; 0,那几乎没有意义。你找错树了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多