首页 > 解决方案 > 进行选择限制字符长度不会返回空值

问题描述

我有一个充满地址记录的表,我正在尝试CHAR_LENGTH对每一列使用限制器进行选择,但是每当我在列中有一个空值时,它都会返回 0 个结果。这是我的例子:

SELECT *
FROM SubjectDetailsView
WHERE ShipInFlag IS NULL
    AND ZipCode IS NOT NULL
    AND CHAR_LENGTH(ZipCode) < 11
    AND CHAR_LENGTH(State) = 2
    AND Address1 IS NOT NULL
    AND CHAR_LENGTH(Address1) < 36
    AND CHAR_LENGTH(Address2) < 36;

我的主要问题是地址2。Zipcode、State 和 Address1 总是有一个值,所以这从来不是问题,但 Address2 通常有一个空值。当我在 Address2 字段中有数据时,我得到一个结果,但如果它为空,我得到 0 个结果。

那么CHAR_LENGTH只是寻找一个字符串(在我的情况下为 1-35),而忽略空值?如果是这样,我如何让我的查询返回结果,如果 Address2 可以有空值而不是空值,同时仍然少于 36 个字符?

标签: mysql

解决方案


您可以使用 IFNULL 函数使字符串具有如下长度empty

SELECT * FROM SubjectDetailsView
WHERE ShipInFlag IS NULL
AND CHAR_LENGTH(IFNULL(ZipCode, 'empty')) < 11
AND CHAR_LENGTH(State) = 2
AND CHAR_LENGTH(IFNULL(Address1, 'empty')) < 36
AND CHAR_LENGTH(IFNULL(Address2, 'empty')) < 36;

推荐阅读