2012-01-03 22 views
2
CREATE TABLE `users` (
    `id`    int(11) AUTO_INCREMENT, 
    `academicdegree` varchar(255), 
    `name`   varchar(255), 
    `firstname`  varchar(255), 
    `sex`   enum('m','f') 
) 
SELECT TRIM(CONCAT_WS(" ", firstname, name)) AS fullname FROM users 

有沒有辦法根據存儲在該領域「性」在短短一個查詢ENUM值增加一個有用的稱呼(先生或女士)?CONCAT連同IF ELSE?

BONUS TRACK: 我只能更換查詢的這個部分:TRIM(CONCAT_WS(" ", firstname, name));是不允許的。

+0

每個性別有多個標題。你會如何選擇正確的? – 2012-01-03 14:26:30

+0

@ a'r我會將它們添加到「手動」查詢中。對於這個例子'm =「先生」而f =「夫人」就足夠了。 – powtac 2012-01-03 14:28:54

回答

4

這會工作得很好:

SELECT TRIM(CONCAT_WS(" ", IF(sex='m', 'Mr.', 'Mrs.'), firstname, name)) AS fullname FROM users 

你可以使用一個CASE語句,但是如果你只有兩個選擇的IF()聲明更有意義。

+1

+1你的比我的漂亮。 – ean5533 2012-01-03 14:28:17

+3

@ ean5533謝謝,但沒有理由刪除你完美的答案:-) – Bojangles 2012-01-03 14:28:56

+1

它的工作原理!非常感謝! – powtac 2012-01-03 14:31:04

3
SELECT TRIM(CONCAT_WS(" ", CASE sex WHEN 'm' THEN 'Mr.' WHEN 'f' THEN 'Mrs.' ELSE '' END, firstname, name)) AS fullname FROM users 

(注:這不同於其他的答案,因爲它不會認爲空sex意味着'Mrs.'雖然個人我不知道,即使sex = 'f'應該真正意味着'Mrs.',因爲這稱呼是正常。不適用於未婚女性,至少低於一定年齡。)

+0

感謝您的注意!但是我會將代碼更改爲德語(Herr/Frau);-) – powtac 2012-01-03 14:32:19

+0

@powtac:O.K.,這樣做更有意義。 :-) – ruakh 2012-01-03 14:42:58