【问题标题】:Using regex with LIKE to sort alphabets first then symbols SQL使用带有 LIKE 的正则表达式先对字母排序,然后对符号 SQL 进行排序
【发布时间】:2015-02-24 05:35:58
【问题描述】:

我有以下 MySQL 查询

SELECT * FROM `travels`.`destinations` AS `Des`
WHERE `Des`.`name` LIKE '%act%' AND `Des`.`sold` = 'N' AND `Des`.`active` = '1'
GROUP BY `Des`.`name` ORDER BY CASE
WHEN `Des`.`name` REGEX 'act*' THEN 0
WHEN `Des`.`name` LIKE '%act' THEN 1
WHEN `Des`.`name` LIKE '%act%' THEN 2
ELSE 3 END, name LIMIT 10

我想要达到的目标: actabc actzzz abcact zzzact abcactzzz act-act

当我按机制使用此组时,它首先显示连字符的结果,这是应该的。我首先想要字母,然后是符号,然后是数字。通配符的顺序相同。

这些是单独工作的: How to sort MySQL results with letters first, symbols last? 和 这有点令人困惑(也没有按照我的意愿给分组): mysql regex get position of matched first alphabetic character

有什么想法吗?

【问题讨论】:

    标签: mysql sql regex select sql-order-by


    【解决方案1】:

    试试这个:

    SELECT * 
    FROM travels.destinations AS D
    WHERE D.name LIKE '%act%' AND D.sold = 'N' AND D.active = '1'
    ORDER BY CASE WHEN D.name REGEXP '^[a-zA-Z]*$' AND D.name LIKE 'act%' THEN 0
                  WHEN D.name REGEXP '^[a-zA-Z]*$' AND D.name LIKE '%act' THEN 1
                  WHEN D.name REGEXP '^[a-zA-Z]*$' AND D.name LIKE '%act%' THEN 2
                  ELSE 3 
             END, 
             D.name 
    LIMIT 10
    

    【讨论】:

    • 嗨,谢谢... 但它显示语法错误:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'REGEX '^[a-zA-Z]*$' AND 附近使用正确的语法
    • 5.5.40-0ubuntu0.14.04.1 - (Ubuntu)
    • 还尝试将 '^[a-zA-Z]*$' 更改为 '^[a-zA-Z]+' 不行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2014-01-10
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多