执行select限制字符长度不会返回空值

q5iwbnjs  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(279)

我有一个满是地址记录的表,我正在尝试用它进行选择 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字段中有数据时,我得到一个结果,但是如果它为null,我得到0个结果。
我也是 CHAR_LENGTH 只寻找一个字符串(在我的例子中是1-35),而忽略空值?如果是这样的话,如果address2可以有空值和非空值,但仍然少于36个字符,那么如何让查询返回结果?

clj7thdc

clj7thdc1#

必须测试address2是否为空:

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 (Address2 IS NULL OR CHAR_LENGTH(Address2) < 36);
qnyhuwrf

qnyhuwrf2#

可以使用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;

相关问题