2009-07-07 7 views
4

私はアドレスのセルにアドレスの束を保持するテーブルを持っています|シティ。 私は、完全なアドレスを共通の「アドレス、都市」フォーマットにマージしようとしています。トリムを使ったmysql concat

私のデータベースでは、場所セルの1つが空になることがあります。したがって、私はコンカットラインでIFNULLを行いますが、先頭または末尾の '、'で終わります。 私は自分のコンカットと一緒に 'トリミング'機能を試しましたが、時には、後に '、'を取得します。

は、これは私が私のクエリ

 
SELECT TRIM(BOTH ',' FROM CONCAT(IFNULL(address,''), ', ', IFNULL(city,''))) FROM locals 

私はこの振る舞いを持つことになり、なぜすべてのアイデア書いた方法ですか?私のconcatステートメントを構築する良い方法はありますか?

答えて

6

は、私はあなたのクエリがちょうどBOTH文のコンマの後のスペースが不足していると思います。それは

SELECT TRIM(BOTH ', ' FROM CONCAT(IFNULL(address,''), ', ', IFNULL(city,''))) FROM locals; 
+0

コンマの後のスペースは、カンマを削除しないことを意味するmysqlを意味しますが、最終的には私の行に余分なスペースがないことに驚いています。 乾杯 – pedalpete

1

これはかなり長いですが、うまくいくようです。したがって、このデータと

SELECT TRIM(CONCAT(IFNULL(address,''), IF(address IS NOT NULL AND city IS NOT NULL, ', ',''), IFNULL(city,''))) FROM locals 

address   city 
---------------------------- 
High Street Southampton 
NULL   London 
Station Road NULL 
London Road Brighton 

あなたはこれを取得するには:

High Street, Southampton 
London 
Station Road 
London Road, Brighton 
-1

のような連続したセパレータの剥離私のために働くようだ "B ,,,, C、D、Eを,,,,, EED、sffre" GROUP_CONCAT

のための任意のエレガントなソリューションのとらえどころのようです

連続した区切り文字を避けて個々のビューを結合または結合しないように、各条件ごとにビューを作成する方法が使用されています。