排序表的正则表达式
问题描述:
我有这个表:排序表的正则表达式
id | text
1 111/Aa
2 111/Sa
3 111/1
4 111/2
5 1111/3
6 1111/bbbbbbbb
如何表中返回的顺序排序记录(从字母的第一个记录到z时/然后递增的数字):
111/Aa
1111/bbbbbbbb
111/Sa
111/1
111/2
1111/3
我想是这样的:
SELECT *
FROM table
ORDER BY IF(text RLIKE '[a-z] ', 1, 2) , text ASC;
,但我得到的东西:/
111/1
111/2
111/3
111/AB
111/bbbbbbbb
111/Sa
有人有想法吗?
答
使用PHP和RLIKE
建议MySQL。您可以使用SUBSTRING_INDEX()
:
order by (case when substring_index(text, '/', -1) rlike '^[0-9]+')
then substring_index(text, '/', -1)
end) asc,
substring_index(text, '/', -1) + 0,
text
第一个“由数值(场“第一,为了第二个订单和最终的排序是当最后一个。把非数字在最后一个)“字段“有着相同的价值观
您的例子不工作,因为没有值包含字母后面有一个空格
答
该解决方案非常感谢:]
但仍有一个小问题:]
查询看起来像这样:
$查询=“由 CASE当SELECT * FROM文本顺序(SUBSTRING_INDEX(文字, '/',-1)RLIKE '^ [0-9] +')THEN SUBSTRING_INDEX (text,'/',-1)END ASC, substring_index(text,'/',-1)+ 0,text ASC “;
,并返回它:
111/0/A
111/AB
111/ST
111/CDFG
111/1
111/1-KS
111/2
五分之一百一十一
六十七分之一百一十一
为什么 “111/0/A” 作为第一个? ...作为规则号码在/被履行之后...而不是那种方式:
111/AB
111/ST
111/CDFG
111/0/A
111/1
111/1-KS
111/2
五分之一百一十一
六十七分之一百一十一
以及如何做到这一点?d