4

我有一个表格,其中包含标记为地址的单元格中的一堆地址 | 城市。我正在尝试将完整的地址合并为通用的“地址、城市”格式。

有时,在我的数据库中,我会将其中一个位置单元格留空。因此,我在 concat 行中做了一个 IFNULL,但我最终得到一个前导或尾随的 ','。我已经尝试了与我的 concat 一起使用“trim”功能,但有时仍会出现尾随“,”。

这就是我编写查询的方式

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

知道为什么我会有这种行为吗?有没有更好的方法来构建我的 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 回答