SQL排序包含字符串

时间:2016-03-07 20:51:39

标签: mysql sql

我想根据'/us/'是否在网址中进行排序。我目前有:

SELECT is_live, store_url from my_table where item_id = 1306085 
ORDER BY (CASE WHEN store_url LIKE '%/us%' THEN 1 ELSE 0 END) DESC

有没有更清洁的方法来做到这一点,还是以上唯一的方法?从概念上讲,我正在寻找更具可读性的东西,例如:

ORDER BY store_url.contains('/us/') DESC

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

SELECT is_live, store_url from my_table where item_id = 1306085 
ORDER BY instr(store_url, '/us/');

或:

SELECT is_live, store_url from my_table where item_id = 1306085 
ORDER BY instr(store_url, '/us/') > 0 ;

SQLFiddle

答案 1 :(得分:1)

您可以创建function

CREATE FUNCTION mycontains (s text, matchText VARCHAR(255))
RETURNS INT DETERMINISTIC
RETURN (CASE WHEN s LIKE CONCAT("%", matchText, "%") THEN 1 ELSE 0 END);

并像

一样使用它
SELECT is_live, store_url from my_table where item_id = 1306085 
ORDER BY mycontains(store_ul, "/us/") DESC

注意:已经有一个包含函数,我认为它适用于几何对象,这就是为什么我将这个命名为mycontains。