concat函数
CONCAT(str1,str2,…)
在使用concat遇到了这样的一个问题,在更新用户收货地址id的时候:
update t_user tu set user_addr_id = (
select
id
from t_addr ta
where
concat(, , )
=
concat(, , )
and user_id=xxx
)
只要province,city,county其中有一个字段属性为NULL值的时候,where之后的过滤条件就变成了null=null,这是不科学的,并不是我想要的结果,原来在使用concat函数的时候, 只要其中一个字段属性有NULL值,concat结果就是NULL。
//有一个字段为NULL
mysql> SELECT concat(1,'22','你好',NULL) display_name;
+--------------+
| display_name |
+--------------+
| NULL |
+--------------+
//有一个字段为''
mysql> SELECT concat(1,'22','你好','') display_name;
+--------------+
| display_name |
+--------------+
| 122你好 |
+--------------+
1 row in set (0.00 sec)
//不为null和''
mysql> SELECT concat(1,'22','你好') display_name;
+--------------+
| display_name |
+--------------+
| 122你好 |
+--------------+
1 row in set (0.00 sec)
concat_ws函数
CONCAT_WS(separator,str1,str2,…), 表示concat with separator,即有分隔符的字符串拼接函数
//有一个字段为NULL
mysql> SELECT concat_ws('-',1,'22','你好',null) display_name;
+--------------+
| display_name |
+--------------+
| 1-22-你好 |
+--------------+
1 row in set (0.01 sec)
//有一个字段为''
mysql> SELECT concat_ws('-',1,'22','你好','') display_name;
+--------------+
| display_name |
+--------------+
| 1-22-你好- |
+--------------+
1 row in set (0.00 sec)
//不为null和''
mysql> SELECT concat_ws('-',1,'22','你好') display_name;
+--------------+
| display_name |
+--------------+
| 1-22-你好 |
+--------------+
1 row in set (0.00 sec)
因此,在更新用户收货地址id的时候,只需要将concat函数换成concat_ws函数即可