我有一个列在冒号分隔的例子2067:2063:2068:2066
中有价值。现在我想以相同的顺序使用SQL查询来命令我的选择列表。这可能使用SQL吗?我通过id,name等了解ORDER,但这是一个不同的场景,因为它有值冒号分隔。有人可以建议需要做什么吗?
据我所知,您想要对数字列表进行排序(以冒号分隔)。这是什么? 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>
数据库并不真正关心字符串中的内容,它将按字符串排序,而不管其中包含的内容。话虽这么说,糟糕的数据库设计会给你一些非常奇怪的结果。
如果你有一个像你一样的行和一行2068:2064:2069:2067
,很明显我的例子将在你的例子中列出的那个之后。不那么明显的2068:2064:2065:2066
会在你的例子之后,但在我之前。更令人困惑的是,这两个人如何订购像2069:2099
这样的东西要难以预测。
根据您的用例说出什么是正确的行为甚至不是特别容易。数据库真的不应该包含像这样的listagg()值;我建议个人更好地存储数据。