【问题标题】:mysql concat with trim带有修剪的mysql concat
【发布时间】:2010-11-08 20:09:40
【问题描述】:

我有一个表格,它在标记为地址 | 的单元格中保存了一堆地址。城市。 我正在尝试将完整地址合并为常见的“地址、城市”格式。

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

这就是我编写查询的方式

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

知道我为什么会有这种行为吗?有没有更好的方法来构建我的 concat 语句?

【问题讨论】:

    标签: mysql concatenation


    【解决方案1】:

    我认为您的查询只是在 BOTH 语句中的逗号后缺少一个空格。这似乎对我有用

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

    【讨论】:

    • 谢谢贾斯汀,虽然我很惊讶逗号后面的空格对 mysql 意味着它不会去掉逗号,但最终它让我免于在我的行中有额外的空格.干杯
    【解决方案2】:

    这很长,但似乎有效。

    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
    

    【讨论】:

      【解决方案3】:

      剥离连续的分隔符,如“a,b,,,,c,d,e,,,,,eed, sffre”似乎对于 GROUP_CONCAT 的任何优雅解决方案都难以实现

      使用的方法是为避免连续分隔符的每个条件创建视图,然后将单个此类视图合并或连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-07
        • 2011-05-02
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多