Oracle11g Oracle SQL如何对行内的数据进行排序

Oracle11g Oracle SQL如何对行内的数据进行排序,oracle11g,Oracle11g,我有以下情况,并寻求帮助,以获得解决方案 字段BLOB_项varchar24000包含以下数据,我需要对其进行排序: 9-5|7-2|8-0|6-6|7-0-5|3-4|2-1|1-9 结果的最小值应替换为9-5,以此类推 谢谢 SHAMER只需查询行,然后用java处理它 最简单的方法是: String[] data = row.split("\\|"); Arrays.sort(data); 根据您希望排序的确切方式,您可能需要为排序定义自定义比较器。如果您面临Oracle SQL中的解

我有以下情况,并寻求帮助,以获得解决方案

字段BLOB_项varchar24000包含以下数据,我需要对其进行排序:

9-5|7-2|8-0|6-6|7-0-5|3-4|2-1|1-9
结果的最小值应替换为9-5,以此类推

谢谢
SHAMER

只需查询行,然后用java处理它

最简单的方法是:

String[] data = row.split("\\|");
Arrays.sort(data);

根据您希望排序的确切方式,您可能需要为排序定义自定义比较器。

如果您面临Oracle SQL中的解决方案,请尝试以下操作:

WITH t AS
 (SELECT BLOB_ITEM str FROM your_table) -- '9-5|7-2|8-0|6-6|7-0-5|3-4|2-1|1-9'
SELECT listagg(vals, '|') within GROUP(ORDER BY 1)
FROM   (SELECT TRIM(x.column_value.extract('e/text()')) vals
        FROM   t t,
               TABLE(xmlsequence(xmltype('<e><e>' || REPLACE(t.str, '|', '</e><e>') || '</e></e>').extract('e/e'))) x);
这首先使用一些XML函数按|分割数据。之后,它在对元素进行排序的同时将元素连接回来


这实际上是一个可怕的用法,但是如果你有一个可怕的数据模型,你会得到一个可怕的解决方案

最小值替换为9-5,依此类推?您的意思是什么?您是否尝试将字符串拆分为数组并进行排序?答案应该是最小值应该放在第一位。您如何定义最小值?您的数据意味着您有一个多对一关系,您使用了最差的技术(又称反模式最大坏值)实现了该关系。相反,将每个值拆分为表中的一行,而不是将它们全部存储在一行中。由于String.split使用正则表达式作为参数,因此必须像下面这样转义管道:row.split\\\|;。我正在寻找一个简单的查询使用任何函数,可以给查询结果不存在。使用一个复杂的查询和许多字符串函数甚至游标都是可能的,但这并不简单;是的,令人印象深刻的可怕:我不想调试这方面的任何问题。谢谢,但当我对我的表进行调试时,它给出了以下“ORA-01489:字符串连接的结果太长错误”。那么,您的单个列中有多少不同的元素?关键是,它将在内部创建一些XML,如9-57-2。因此,它将为每个元素添加7个字符,如9-5。如果这将达到4000个字符的限制,那么If将在这个ORA异常中结束,尽管……正如您所提到的,它会产生可怕的结果。连接太长。你是对的!那么,为什么不面对真正的问题,数据模型呢;你记忆中有什么解决办法吗?我无法更改数据模型: