我需要对字母进行排序,但要对数字进行排序,但随后又要对字母进行排序?
如果我这样做
ORDER BY name ASC
我明白了...
2d this 10
2d this 9
this item
但是我想要这个
2d this 9
2d this 10
this item
到目前为止,我已经做到了...
ORDER BY CAST(name AS UNSIGNED) ASC
这给了我这个...
this item
2d this 9
2d this 10
因此它的d1 this 9
和d1 this 10
正确的,但我需要this item
在最后。
我一直保持这种方式,然后在遍历结果时进行检查this item
,存储并在循环结束后将其添加到结果中,但是在SQL查询中有没有办法做到这一点呢?
您可以替换字符串末尾的数字,并将其用作第一个键order by
:
order by regexp_replace(name, '[0-9]*$', ''),
length(name),
name
在早期版本的MySQL中,您可以更轻松地删除最后的数字:
order by (case when name regexp ' [0-9]+$'
then left(name, length(name) - instr(reverse(name), ' '))
else name
end),
length(name),
name
这是db <>小提琴。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句