我想知道是否有可能对结果进行排序,以便如果一个列包含一个特定的单词('misc'),它会在最后出现?
当前查询:
select * from table order by name asc
目前的结果:
banjo
guitar
miscproduct1
miscproduct2
piano
伪代码:
select * from table order by name asc,
except if name like '%misc%' then sort it last
伪结果:
banjo
guitar
piano
miscproduct1
miscproduct2
这可能吗?
答案 0 :(得分:0)
您可以使用LOCATE()
作为第一个排序参数:
ORDER BY LOCATE('misc', name), name;
如果在主题中找不到搜索字符串,则LOCATE()
函数返回0
,如果找到则生成正整数。
要标准化包含搜索的主题的排序,您可以将其与LEAST()
结合使用:
ORDER BY LEAST(LOCATE('misc', name), 1), name;
答案 1 :(得分:-1)
您可以在ORDER BY子句中使用CASE。
SELECT colName
FROM table
ORDER BY
CASE WHEN colName LIKE 'misc%'
THEN concat('zzz',colName)
ELSE colName
END