4

address | というラベルの付いたセルに一連のアドレスを保持するテーブルがあります。街。完全な住所を一般的な「住所、都市」形式にマージしようとしています。

ときどき、私のデータベースでは、ロケーション セルの 1 つが空になることがあります。したがって、連結行で IFNULL を実行しますが、先頭または末尾に「,」が付きます。concat と一緒に「トリム」機能を試しましたが、まだ末尾に「,」が付くことがあります。

これが私のクエリの書き方です

SELECT TRIM(BOTH ',' FROM CONCAT(IFNULL(住所,''), ', ', IFNULL(都市,''))) FROM ローカル

なぜ私がこの振る舞いをするのか、何か考えはありますか? concat ステートメントを作成するより良い方法はありますか?

4

3 に答える 3

6

BOTHステートメントのコンマの後にクエリにスペースが足りないだけだと思います。それは私のために働くようです

SELECT TRIM(BOTH ', ' FROM CONCAT(IFNULL(address,''), ', ', IFNULL(city,''))) FROM locals;
于 2009-07-07T21:08:42.173 に答える
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
于 2009-07-07T20:56:14.337 に答える
-1

"a,b,,,,c,d,e,,,,,eed, sffre" のような連続するセパレーターを取り除くことは、GROUP_CONCAT の洗練された解決策を見つけにくいようです。

使用される方法は、連続したセパレーターを回避する各条件のビューを作成し、次にそのような個々のビューのユニオンまたはジョインを作成することです。

于 2012-07-23T03:04:21.157 に答える