仅当值存在时才连接mysql字符串

8yoxcaq7  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(308)

我有一张table

table1: ID, object1, object2, object3

我想连接 object1, object2 and object3 仅当值存在于所有对象中时。
例如:

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

我希望这个查询只有在所有对象中都有值时才为真。
当对象2和对象3中没有值时,上述查询的结果类似于:

object1\\

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

object1 (without back slashes)

当object2和object3中没有值时,我希望避免上述查询产生的场景。如何根据可用性值编写一个动态连接的查询?

zkure5ic

zkure5ic1#

使用 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                             |
+------------------------------------------+

好的模式不会处理空值和空值 '' 相同的。但有时你别无选择。在这种情况下使用 nullif 把空白变成空。

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

您可能希望将这些都转换为一个存储过程。

相关问题