如何在 Oracle SQL 中使用冒号分隔列的 ORDER by 进行排序?

How to use ORDER by for colon separated column for sorting in Oracle SQL?

我有一列在冒号分隔的示例中具有值 2067:2063:2068:2066。现在我想使用 SQL 查询以相同的顺序对我的 select 列表进行排序。这可能使用 SQL 吗?我知道按 ID、名称等进行排序,但这是一个不同的场景,因为它的值以冒号分隔。有人可以建议需要做什么吗?

数据库并不真正关心字符串中的内容,它会按字符串排序,而不管其中包含什么。话虽如此,糟糕的数据库设计会给您带来一些非常奇怪的结果。

如果你有一行像你的例子,还有一行有 2068:2064:2069:2067,很明显我的例子将在你的例子中列出的之后。不太明显 2068:2064:2065:2066 会出现在你的例子之后,但在我的例子之前。更令人困惑的是,这两个如何用 2069:2099 之类的东西排序更难预测。

根据您的用例说什么是正确的行为甚至不是特别容易。数据库真的不应该包含这样的 listagg() 值;我个人建议更好地存储数据。

据我了解,您想对该数字列表进行排序(以冒号分隔)。这是什么? Apex 穿梭项目或多选列表?

无论如何,看看这是否有帮助:

SQL> WITH test AS (SELECT '2067:2063:2068:2066' item FROM DUAL),
  2       gimme_rows
  3       AS (    SELECT REGEXP_SUBSTR (item,
  4                                     '[^:]+',
  5                                     1,
  6                                     LEVEL)
  7                         res
  8                 FROM test
  9           CONNECT BY LEVEL <= REGEXP_COUNT (item, ':') + 1)
 10  SELECT LISTAGG (res, ':') WITHIN GROUP (ORDER BY res) final_result
 11    FROM gimme_rows;

FINAL_RESULT
--------------------------------------------------------
2063:2066:2067:2068

SQL>