SELECT tracking_number FROM logistics_trajectory WHERE state = '1' AND IFNULL(INSTR(logistics_trajectory, '签收'), 0) < 0;为什么如果字段logistics_trajectory为空的话,查不出来
时间: 2024-03-24 13:36:40 浏览: 62
查询语句为什么不为空?
在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,这样就可以正确地过滤掉包含"签收"的物流信息了。
阅读全文