2009-07-07 81 views
4

我有一张桌子,里面放着一堆地址,地址标记为地址|市。 我正试图将完整的地址合并为通用'地址,城市'格式。mysql concat with trim

有时候,在我的数据库中,我将有一个位置单元格为空。因此,我在我的concat行中做了一个IFNULL,但是我最终得到了一个前导或尾随','。 我尝试了'trim'函数以及我的concat,但偶尔还是会出现''''的情况。

这是怎么了,我写我的查询

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

任何想法,为什么我会有这样的行为?有没有更好的方法来构建我的concat语句?

回答

6

我认为你的查询只是缺少在两个陈述逗号后的空间。这似乎为我

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

感谢贾斯汀,虽然我很惊讶逗号后面的空格意味着mysql不会去掉逗号,但最终它让我从我的行中获得了额外的空间。 干杯 – pedalpete 2009-07-08 03:13:42

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

剥离连续分隔符,如 “A,B ,,,, C,d,E ,,,,, EED,sffre” 似乎是难以捉摸GROUP_CONCAT

任何优雅的解决方案的工作

使用的方法是为每个条件创建视图,避免连续的分隔符,然后联合或加入单个这样的视图。