我的桌子是这样的:
KeyValueCache
,我想将相应列的名称附加到相应的值。像这样的东西:
Id | Name | ph_office | ph_home
1 | ab | 111 | NULL
2 | cd | NULL | 222
3 | ef | 333 | 444
4 | gh | NULL | NULL
我尝试使用
Id | Name | phone
1 | ab | phone_office: 111
2 | cd | phone_home: 222
3 | ef | phone_office: 333, phone_home: 444
4 | gh | NULL
我想忽略具有空值的列。我对select id, Name,
CONCAT('ph_office: ', COALESCE(ph_office,''),',','ph_home:',COALESCE(ph_home,'')) as phone
from contacts;
Id | Name | phone
1 | ab | ph_office: 111,ph_home:
2 | cd | ph_office:, ph_home: 222
3 | ef | ph_office: 333, ph_home: 444
4 | gh | ph_office:,ph_home
的陈述不太擅长。如何在mysql中完成?
感谢您的时间
答案 0 :(得分:2)
Concat()
函数代替Concat_ws()
。它用于通过给定的分隔符连接多个子字符串。如果任何子字符串为<script>
import pai from './pai'
export default {components: {parent},
data: () => ({
valueMsg = 'Hello Test'
})
}
,则将其跳过。这在任何一个为Null
的情况下都会对我们有帮助;这样我们就不必再加上前导/尾随逗号了。Case .. When
来考虑仅当字符串的值null
时才串联的字符串请尝试以下操作:
IS NOT NULL
编辑(未意识到Gordon Linoff已经使用以下方法进行了回答):
但是,可以使用不使用SELECT
id,
Name,
CONCAT_WS(', ',
(CASE
WHEN ph_office IS NOT NULL THEN CONCAT('ph_office: ', ph_office)
END),
(CASE
WHEN ph_home IS NOT NULL THEN CONCAT('ph_home: ', ph_home)
END)
) AS phone
FROM contacts;
的更整洁的技术。通过Case .. When
函数的Docs:
如果任何参数为NULL,则CONCAT()返回NULL。
Concat()
请注意,仅当SELECT
id,
Name,
CONCAT_WS(', ',
CONCAT('ph_office: ', ph_office),
CONCAT('ph_home: ', ph_home)
) AS phone
FROM contacts;
或ph_office
的值为ph_home
而不是空字符串时,此方法才有效。
答案 1 :(得分:2)
使用CONCAT_WS()
:
select id, Name,
concat_ws(', ',
concat('phone_office: ', ph_office),
concat('ph_home: ', ph_home)
) as phones
from contacts;