0

我有一个这样的 MySQL 查询:

SELECT `contact_last_name` FROM `customer` WHERE `contact_last_name` IS NOT NULL

基本上我想返回该列contact_last_name中输入了某些内容的任何行。如果有任何区别,则此列是 VARCHAR 列。

但相反,它返回数据库中的每一行,无论该列是否为空!

我不确定为什么这个查询不起作用?

4

3 回答 3

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
于 2013-10-27T23:08:54.340 回答
0

varchar 是空字符串和显式 NULL 是有区别的。你可以试试这个 where 子句:

LENGTH(contact_last_name) > 0;
于 2013-10-27T23:10:07.953 回答
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, '') != ''

还要注意从查询中删除不必要的反引号 - 您拥有的列/表名称都不是保留字。

于 2013-10-27T23:10:30.243 回答