SELECT tracking_number FROM logistics_trajectory WHERE state = '1' AND INSTR(logistics_trajectory, '签收') < 0为什么如果字段logistics_trajectory为空的话,查不出来
时间: 2024-04-01 09:32:30 浏览: 50
如果字段logistics_trajectory为空,那么它的值为NULL。在SQL中,NULL不等于任何值,因此当logistics_trajectory为NULL时,INSTR(logistics_trajectory, '签收')的结果也是NULL。在这种情况下,查询条件变为state = '1' AND NULL < 0,这会导致无法查出任何结果。要解决这个问题,可以使用COALESCE函数或者IFNULL函数将NULL转换为一个非NULL的值,例如将NULL转换为空字符串'',这样就可以正确地执行查询了。例如:
SELECT tracking_number FROM logistics_trajectory WHERE state = '1' AND COALESCE(INSTR(logistics_trajectory, '签收'), 0) < 0;
或者:
SELECT tracking_number FROM logistics_trajectory WHERE state = '1' AND IFNULL(INSTR(logistics_trajectory, '签收'), 0) < 0;
相关问题
SELECT tracking_number FROM logistics_trajectory WHERE state = '1' AND IFNULL(INSTR(logistics_trajectory, '签收'), 0) < 0;为什么如果字段logistics_trajectory为空的话,查不出来
在SQL中,比较运算符如<、>、=等在比较NULL时会返回UNKNOWN,而不是TRUE或FALSE。因此,当logistics_trajectory为NULL时,IFNULL函数会将其转换为0,然后执行INSTR函数返回0,最终查询条件变为state = '1' AND 0 < 0,这会导致无法查出任何结果。要解决这个问题,可以使用COALESCE函数将NULL转换为一个非NULL的值,例如将NULL转换为空字符串'',这样就可以正确地执行查询了。例如:
```
SELECT tracking_number FROM logistics_trajectory WHERE state = '1' AND COALESCE(INSTR(logistics_trajectory, '签收'), 0) < 1;
```
在这个查询中,COALESCE函数将INSTR函数返回的NULL值转换为0,然后比较0和1,这样就可以正确地过滤掉包含"签收"的物流信息了。
SELECT tracking_number FROM logistics_trajectory WHERE state = '1' AND logistics_trajectory RLIKE '\\b签收\\b'为什么如果字段logistics_trajectory为空的话,查不出来
如果logistics_trajectory字段为空,那么RLIKE运算符会返回NULL,而不是TRUE或FALSE。因此,在查询条件中使用RLIKE运算符时,如果logistics_trajectory字段为空,则无论如何都不会匹配任何记录。为了解决这个问题,您可以添加一个额外的条件,来判断logistics_trajectory字段是否为空。例如:
```
SELECT tracking_number
FROM logistics_trajectory
WHERE state = '1' AND (logistics_trajectory IS NULL OR logistics_trajectory RLIKE '\\b签收\\b')
```
在这个查询中,使用了括号将两个条件(logistics_trajectory IS NULL OR logistics_trajectory RLIKE '\\b签收\\b')组合在一起,其中第一个条件(logistics_trajectory IS NULL)会匹配logistics_trajectory字段为空的记录,第二个条件(logistics_trajectory RLIKE '\\b签收\\b')会匹配包含"签收"的物流信息。这样,就可以正确地查询出包含"签收"的物流信息,同时也能查询出logistics_trajectory字段为空的记录。
阅读全文