我有一个这样的 MySQL 查询:
SELECT `contact_last_name` FROM `customer` WHERE `contact_last_name` IS NOT NULL
基本上我想返回该列contact_last_name
中输入了某些内容的任何行。如果有任何区别,则此列是 VARCHAR 列。
但相反,它返回数据库中的每一行,无论该列是否为空!
我不确定为什么这个查询不起作用?
NULL
要求该列实际上是NULL
. 不是空字符串。您是否要检查它是否为空?
SELECT
`contact_last_name`
FROM
`customer`
WHERE
`contact_last_name` != ''
你有空白问题吗?
SELECT
`contact_last_name`
FROM
`customer`
WHERE
TRIM(`contact_last_name`) != ''
可以既是NULL
又空?
SELECT
`contact_last_name`
FROM
`customer`
WHERE
`contact_last_name` != ''
AND
`contact_last_name` IS NOT NULL
varchar 是空字符串和显式 NULL 是有区别的。你可以试试这个 where 子句:
LENGTH(contact_last_name) > 0;
NULL
(未知值)与“空白”(已知,但长度为零的字符串)不同,因此您必须检查两者:
SELECT contact_last_name
FROM customer
WHERE contact_last_name IS NOT NULL
AND contact_last_name != ''
使用 mysql,这可以缩短为:
SELECT contact_last_name
FROM customer
WHERE ifnull(contact_last_name, '') != ''
还要注意从查询中删除不必要的反引号 - 您拥有的列/表名称都不是保留字。