【问题标题】:MySQL select order by contains numMySQL select order by contains num
【发布时间】:2015-11-28 19:45:02
【问题描述】:

这是我的桌子:

--------------
    Names
--------------
   "Ben 52"
   "Dan 236"
   "Carter 73"
   "Harry"
   "Peter 53"
   "Connor 27"
   "Morgan"
   "Richard 675"

我想创建一个查询,将不带数字的列放在列表末尾。这基本上就是我要创建的想法:

SELECT names FROM table1 ORDER BY ContainsNum(names) DESC

这是我应该得到的结果:

--------------
    Names
--------------
   "Ben 52"
   "Dan 236"
   "Carter 73"
   "Peter 53"
   "Connor 27"
   "Richard 675"
   "Harry"
   "Morgan"

如果我不够清楚,请发表评论。 我以前没有看到有人问过这个问题。

谢谢!

【问题讨论】:

  • 这个问题没有显示任何研究工作。
  • 你使用的是哪个数据库
  • @petethepagan-gerbil 我已经尝试过用例和其他一些陈述,但它们都没有接近工作。
  • @TabAlleman 我一直在搜索其他教程,但我找不到任何像我想要做的事情的东西
  • @Indian MySql 是数据库的类型

标签: mysql sql


【解决方案1】:

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

order by (case when names regexp '.*[0-9].*' then 0 else 1 end),
         names

具体语法因数据库而异。

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

【讨论】:

  • 谢谢你成功了!我只能在 8 分钟内接受,所以我很快就会接受 :)
【解决方案2】:

SELECT names FROM table1 ORDER BY SUBSTRING(names, LENGTH(names)-2, 1) DESC

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

【讨论】:

  • 它说LEN功能不存在。如您所见,其他人解决了问题,所以无论如何感谢您尝试帮助我!
  • 您的查询不适用于超过两位数的数字。
  • 为什么不呢?原始问题中的数字不按顺序排列,唯一的要求是“有数字的记录在没有的记录之后”。
【解决方案3】:
SELECT names, case when REGEXP_LIKE(names, '[[:digit:]]') then '1' else '2' end ordering_col
FROM table1
order by 2;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多