mysql字符串拼接函数:concat和concat_ws

concat函数

CONCAT(str1,str2,…)

在使用concat遇到了这样的一个问题,在更新用户收货地址id的时候:

update t_user tu set user_addr_id = (
    select 
    id 
    from t_addr ta
    where
    concat(ta.province, ta.city, ta.county)
    =
    concat(tu.province, tu.city, tu.county)
    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函数即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值