2014-12-05 27 views
0

我正在使用的數據庫表有四個特定列中的某些值的引號。我已經使用下面的查詢來選擇我需要的數據,但我希望能夠從這些列中刪除引號。在現有的SQL查詢中添加修剪功能

SELECT t1.id, 
IF(
    LOCATE(' ', t1.name) > 0, 
    SUBSTRING(t1.name, 1, LOCATE(' ', t1.name) - 1), 
    t1.name 
    ) AS memberfirst, 
    IF(
    LOCATE(' ', t1.name) > 0, 
    SUBSTRING(t1.name, LOCATE(' ', t1.name) + 1), 
    NULL 
    ) AS memberlast , 
    t1.name, 
    MAX(CASE WHEN t2.`profile_key` = 'profile.address1' THEN t2.profile_value END) address, 
    MAX(CASE WHEN t2.`profile_key` = 'profile.city' THEN t2.profile_value END) city, 
    MAX(CASE WHEN t2.`profile_key` = 'profile.postal_code' THEN t2.profile_value END) postal_code, 
    MAX(CASE WHEN t2.`profile_key` = 'profile.phone' THEN t2.profile_value END) phone 
FROM users t1 
LEFT JOIN user_profiles t2 
    ON t1.id = t2.user_id 
GROUP BY t1.id, t1.name 

我將TRIM的雙列引號的4列是:profile.address1, profile.city, profile.postal_code, and profile.phone列。我相信代碼將是這樣的:

TRIM(BOTH '"' FROM profile.address1) AS trimmed_profile.address1 FROM user_profiles ...但我不能完全肯定是否可以在上面

回答

1

它需要使用replace()

mysql> select replace('"stackoverflow"','"','') as str; 
+---------------+ 
| str   | 
+---------------+ 
| stackoverflow | 
+---------------+ 
1 row in set (0.00 sec) 

所以不trim()集成在你的情況下,你可以使用像

MAX(CASE WHEN replace(t2.profile_key,'"','') = 'profile.address1' THEN t2.profile_value END) address 

等等。

+0

這需要合併到查詢中。無論出於何種原因,當用戶配置文件數據添加到站點時,它將用引號存儲在數據庫中。我不想修改數據庫中的數據,只修改由於上述查詢而輸出的數據。 – 2014-12-05 06:41:36

+0

是的,它不會更新數據,它只會在顯示時間'MAX(CASE WHEN取代(t2.profile_key,''','')='profile.address1'THEN t2.profile_value END)地址' – 2014-12-05 06:44:13

+0

感謝您指示我朝着正確的方向行!最後必須讓替換部分像這樣移動:'MAX(CASE WHEN t2.'profile_key' ='profile.address1'THEN replace(t2.profile_value,''','' )結束)地址,'但是然後它工作 – 2014-12-05 07:03:36