MySQL按包含数选择订单

MySQL按包含数选择订单,mysql,sql,Mysql,Sql,这是我的桌子: -------------- Names -------------- "Ben 52" "Dan 236" "Carter 73" "Harry" "Peter 53" "Connor 27" "Morgan" "Richard 675" 我想创建一个查询,将没有数字的列放在列表的末尾。这基本上就是我想要创造的理念: 按ContainsNum(名称)DESC从表1中选择名称 这是我应该得到的结果: -----------

这是我的桌子:

--------------
    Names
--------------
   "Ben 52"
   "Dan 236"
   "Carter 73"
   "Harry"
   "Peter 53"
   "Connor 27"
   "Morgan"
   "Richard 675"
我想创建一个查询,将没有数字的列放在列表的末尾。这基本上就是我想要创造的理念:


按ContainsNum(名称)DESC从表1中选择名称

这是我应该得到的结果:

--------------
    Names
--------------
   "Ben 52"
   "Dan 236"
   "Carter 73"
   "Peter 53"
   "Connor 27"
   "Richard 675"
   "Harry"
   "Morgan"
如果我不够清楚,请发表评论。 我以前没见过有人问这个问题


谢谢大家!

只需使用
orderby
。大多数数据库支持某种形式的正则表达式,如下所示:

order by (case when names regexp '.*[0-9].*' then 0 else 1 end),
         names
具体语法因数据库而异


注意:它只适用于
名称regexp'[0-9]'
。我添加了通配符,因为我认为它使模式更直观。

只需使用
orderby
。大多数数据库支持某种形式的正则表达式,如下所示:

order by (case when names regexp '.*[0-9].*' then 0 else 1 end),
         names
具体语法因数据库而异


注意:它只适用于
名称regexp'[0-9]'
。我添加了通配符,因为我认为它使模式更直观。

从表1中按子字符串(名称、长度(名称)-2、1)顺序选择名称


以数字结尾的所有内容都将低于以字符结尾的所有内容。

从表1中按子字符串顺序选择名称(名称、长度(名称)-2、1)DESC

SELECT names, case when REGEXP_LIKE(names, '[[:digit:]]') then '1' else '2' end ordering_col
FROM table1
order by 2;


以数字结尾的所有内容都将低于以字符结尾的所有内容。

此问题没有显示任何研究成果。您是哪个数据库using@petethepagan-沙鼠我试过使用用例和其他一些语句,但没有一个能很好地工作。@TabAlleman我一直在搜索其他教程,但我找不到任何像我想做的那样的东西do@IndianMySql是数据库的类型这个问题并没有显示任何研究成果。你们是哪个数据库using@petethepagan-沙鼠我试过使用案例和其他一些陈述,但没有一个是接近工作的。@TabAlleman我一直在搜索其他的教程,但我找不到任何像我所尝试的那样的东西do@IndianMySql是数据库的类型谢谢你,它成功了!我只能在8分钟内接受,所以我很快就会接受:)谢谢你,它成功了!我只能在8分钟内接受它,所以我很快就会接受:)它说LEN函数不存在。正如你所看到的,另一个人解决了这个问题,所以无论如何,谢谢你尝试帮助我!您的查询将不适用于两位数以上的数字。为什么不?原始问题中的数字不符合顺序,唯一的要求是“有数字的记录在没有数字的记录之后”。它说LEN函数不存在。正如你所看到的,另一个人解决了这个问题,所以无论如何,谢谢你尝试帮助我!您的查询将不适用于两位数以上的数字。为什么不?原始问题中的数字不符合顺序,唯一的要求是“有数字的记录在没有数字的记录之后”。无需将排序顺序信息放入结果集中。请参阅。无需将排序顺序信息放入结果集中。看见
SELECT names, case when REGEXP_LIKE(names, '[[:digit:]]') then '1' else '2' end ordering_col
FROM table1
order by 2;