【问题标题】:Oracle sql order by with character in orderOracle sql order by with character in order
【发布时间】:2012-08-20 07:24:24
【问题描述】:

美好的一天,也许有人可以帮助我,我想在 oracle sql 上获得 n 选择输出,但是当我订购时它不正确。

code_order
1.
2.
2.1
3.
4.2
10.1
10.0
21.
21.1
23.
31.

它需要按数字排序,并且所有值在.中都有一个句号

有什么想法吗??

Thanx,但我看到有些值可以包含非数值以及 C、B 等。

                    1. 7C。 40. 50. 51. 6.
表格大纲:

code_order 是 varchar2

【问题讨论】:

  • 您的类型可能不是数字的,这就是它任意排序的原因。您可能在某处需要CAST;但在不知道您的表的架构和正在使用的查询的情况下,无法给您更好的答案。
  • 10.0 是否意味着在 10.1 之后?
  • 编辑问题并发布一个包含所有案例、错误结果和所需结果的更好示例。
  • 7C是什么意思?在这个六边形?或者你想摆脱C?你想得到什么?

标签: sql oracle select sql-order-by


【解决方案1】:

使用order by to_number(code_order)

【讨论】:

  • to_number 如果字段上有characters 会出错,它确实会出错(根据OP)。
  • 字符是在我的回复之后出现的。他还没有解释如何处理它们。
【解决方案2】:
    with
    val as
    (
      SELECT '1.' as c FROM dual
      union all
      SELECT '2.' as c FROM dual
      union all
      SELECT '3.' as c FROM dual
      union all
      SELECT '2.1' as c FROM dual
      union all
      SELECT '4.2' as c FROM dual
      union all
      SELECT '10.1' as c FROM dual
      union all
      SELECT '21.' as c FROM dual
      union all
      SELECT '10.0' as c FROM dual
      union all
      SELECT '21.1' as c FROM dual
      union all
      SELECT '23.' as c FROM dual
      union all
      SELECT '31.' as c FROM dual
    )
SELECT c FROM val
order by to_number(regexp_replace(c, '^(\d+)\..*$', '\1'))
    ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多