哪个用,concat,concat_ws?在mysql中

时间:2012-01-10 19:09:34

标签: php mysql

在PHP中,我需要更改此数据

FirstName | MiddleName | LastName
---------------------------------
Robert    | Thomas     | Smith

进入字符串“Smith,Robert Thomas”

我不确定是否需要使用joinconcatconcat_ws

我知道如果我使用

concat_ws(', ',LastName,FirstName,MiddleName)

然后我得到“史密斯,罗伯特,托马斯”,但我需要“史密斯,罗伯特托马斯”。

有什么建议吗?

3 个答案:

答案 0 :(得分:20)

我意识到这是一个死灵,但值得注意以下几点:

CONCAT& CONCAT_WS在很大程度上是等同的。

但是,最值得注意的区别是,CONCAT可能不会返回任何输入为NULL的情况下您期望的结果。在这些情况下,CONCAT将返回NULL,而CONCAT_WS将跳过NULL值,并仍返回包含其余输入结果的字符串。这意味着在大多数情况下,您可能希望使用CONCAT_WS

以下是等效的,除非一个或多个输入为NULL:

// Result: LastName, FirstName, MiddleName
CONCAT( LastName, ', ', FirstName, ', ', MiddleName )

// Result: LastName, FirstName, MiddleName
CONCAT_WS( ', ', LastName, FirstName, MiddleName )

如果您希望CONCAT_WS使用不同的'分隔符'只需将第一个输入设置为空字符串:

// Result: LastName, FirstName (MiddleName)
CONCAT_WS( '', LastName, ', ', FirstName, ' (', MiddleName, ')' )

答案 1 :(得分:8)

然后使用

CONCAT(LastName, ', ', FirstnName, ' ', MiddleName)

CONCAT_WS用于仅与一个分隔符连接,而CONCAT以任何您想要的方式将字符串附加在一起。

答案 2 :(得分:0)

像这样写SQL以获得所需的结果:

SELECT CONCAT_WS(', ', author_lname, CONCAT(author_fname,' ', author_lastname)) AS info FROM books;

它将返回输出:

史密斯,詹姆斯·布莱克