我有一张桌子
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中没有值时,我想避免由上述查询引起的情况。如何编写查询以根据值的可用性动态串联?
答案 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。