假設我們有一個這樣的 MySQL 表:
middle first last name
--------------------------- -------------
reyes sanchez reyes sanchez
antonio cruz antonio cruz
m michael middleton m michael middleton
a greg allen a greg allen
我如何撰寫一個陳述句來組合這 3 列,它看起來像名為 的列name?我們可以假設中間、第一和最后一列不可為空,但可以為空、有空格,或者如果非空,則在左側/右側有空格?
我試著寫這樣的東西:
CONCAT(middle ' ', RTRIM(first), RTRIM(last)) AS name
但即使是第一個結果也表明了這一點:0reyessanchez我不知道如何在兩者之間插入一個空格,我不知道為什么 MySQL 插入一個 0 而不是取空格。
uj5u.com熱心網友回復:
mysql> select middle, first, last from mytable;
-------- --------- -----------
| middle | first | last |
-------- --------- -----------
| | reyes | sanchez |
| | antonio | cruz |
| m | michael | middleton |
| a | greg | allen |
-------- --------- -----------
mysql> select concat_ws(' ', nullif(trim(middle), ''), trim(first), trim(last))
as fullname
from mytable;
---------------------
| s |
---------------------
| reyes sanchez |
| antonio cruz |
| m michael middleton |
| a greg allen |
---------------------
MySQL 的CONCAT_WS() 函式忽略 NULL。
uj5u.com熱心網友回復:
在添加空格之前,您必須明確檢查列是否為非空白:
rtrim(
concat(
if(length(trim(middle)),concat(trim(middle),' '),''),
if(length(trim(first)),concat(trim(first),' '),''),
ltrim(last)
)
)
uj5u.com熱心網友回復:
這將為您提供所需的價值:
TRIM( REGEXP_REPLACE( CONCAT(middle, ' ', first, ' ', last), '[[:space:]] ', ' ') )
解釋:
CONCAT(middle, ' ', first, ' ', last)連接三個字串。
PREG_REPLACE()用單個空格替換多個空格(請參閱https://stackoverflow.com/a/52855455/378779)。
最后TRIM()修剪任何前導任何尾隨空格。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/421781.html
標籤:
