仅当值存在时才进行MySQL字符串连接

时间:2018-12-20 22:27:34

标签: mysql

我有一张桌子

table1: ID, object1, object2, object3

仅当值在所有对象中都存在时,我才想串联object1, object2 and object3

例如:

select ID, object1 +'\'+ Object2 +'\'+ object3 from table1

我希望仅当所有对象中都存在值时此查询才为真。

当对象2和对象3中没有值时,上述查询的结果将类似于:

object1\\

但是我希望输出仅作为(当object2和object3中没有值时)

object1 (without back slashes)

当对象2和对象3中没有值时,我想避免由上述查询引起的情况。如何编写查询以根据值的可用性动态串联?

1 个答案:

答案 0 :(得分:1)

使用concat_ws。它将自动跳过空值。

mysql> select concat_ws('\\', 'foo', 'bar', null, 'baz');
+--------------------------------------------+
| concat_ws('\\', 'foo', 'bar', null, 'baz') |
+--------------------------------------------+
| foo\bar\baz                                |
+--------------------------------------------+

但是它不会跳过空格。

mysql> select concat_ws('\\', 'foo', 'bar', '', 'baz');
+------------------------------------------+
| concat_ws('\\', 'foo', 'bar', '', 'baz') |
+------------------------------------------+
| foo\bar\\baz                             |
+------------------------------------------+

好的架构不会将null和''视为相同。但是有时候你别无选择。在这种情况下,请使用nullif将空格变成空值。

mysql> set @var = '';
mysql> select concat_ws('\\', 'foo', 'bar', nullif(@var, ''), 'baz');
+--------------------------------------------------------+
| concat_ws('\\', 'foo', 'bar', nullif(@var, ''), 'baz') |
+--------------------------------------------------------+
| foo\bar\baz                                            |
+--------------------------------------------------------+

您可能想将所有内容都变成stored procedure