我有一个像这样的MySQL查询:
SELECT `contact_last_name` FROM `customer` WHERE `contact_last_name` IS NOT NULL
基本上我想返回列contact_last_name
中输入了一些内容的任何行。如果它有任何区别,则此列是VARCHAR列。
但相反,它返回数据库中的每一行,无论该列是否为空!
我不确定为什么这个查询不起作用?
答案 0 :(得分:2)
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
答案 1 :(得分:0)
varchar是一个空字符串,它显然是NULL。您可以尝试使用where where子句:
LENGTH(contact_last_name) > 0;
答案 2 :(得分: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, '') != ''
还要注意从查询中删除不必要的反引号 - 您拥有的列/表名都不是保留字。