sql - 使用 Oracle SQL 找出逗号分隔字符串中的最大数字

标签 sql oracle plsql oracle10g aggregate-functions

我有一个包含两列的表格:

OLD_REVISIONS   |NEW_REVISIONS
-----------------------------------
1,25,26,24      |1,26,24,25
1,56,55,54      |1,55,54
1               |1
1,2             |1
1,96,95,94      |1,96,94,95
1               |1
1               |1
1               |1
1               |1
1,2             |1,2
1               |1
1               |1
1               |1
1               |1
  • 对于每一行,都会有一个文档的修订列表(逗号分隔)

  • 逗号分隔的列表在两列中可能相同,但顺序/排序可能不同 - 例如

    2,1 |1,2

我想找出 OLD_REVISIONS 列中的最高版本低于 NEW_REVISIONS 中的最高版本的所有实例

以下内容符合该标准

OLD_REVISIONS   |NEW_REVISIONS
-----------------------------------
1,2             |1
1,56,55,54      |1,55,54
  • 我尝试了一个使用 MINUS 选项的解决方案(将表连接到自身),但即使列表相同但顺序错误,它也会返回差异

  • 我尝试了函数 GREATEST(即 greatest(new_Revisions) < greatest(old_revisions) ),但我不确定为什么最大(OLD_REVISIONS)总是只返回逗号分隔值。它不返回最大值。我怀疑它正在比较字符串,因为列是 VARCHAR。

另外,MAX函数需要一个数字。

还有其他方法可以实现上述目标吗?我正在寻找一个纯 SQL 选项,以便我可以打印出结果(或可以打印出结果的 PL/SQL 选项)

编辑

很抱歉没有提及这一点,但对于 NEW_REVISIONS,我确实将数据放在一个表中,其中每个修订版都位于单独的行中:

"DOCNUMBER" "REVISIONNUMBER"
67          1
67          24
67          25
67          26
75          1
75          54
75          55
75          56
78          1
79          1
79          2
83          1
83          96
83          94

只是为了提供一些内容,几周前我怀疑有修订消失了。 为了对此进行调查,我决定对所有文档的所有修订进行计数,并拍摄快照以便稍后进行比较,以查看是否确实缺少修订。

我拍摄的快照包含以下列:

docnumber, count, revisions

使用 listagg 函数将修订存储在逗号分隔的列表中。

我现在遇到的问题是实时表,已经添加了新的修订版,所以当我使用减号比较主表和快照时,我得到了不同,因为 主表中的新修订。

尽管在实际表中修订是单独的行,但在快照表中我没有单独的行。

我正在考虑以相同格式重新创建快照并比较它们的唯一方法,看看主表中的最大修订是否低于快照表中的最大修订(因此为什么我试图找出如何找到以逗号分隔的字符串中的最大值)

最佳答案

享受吧。

select    xmlcast(xmlquery(('max((' || OLD_REVISIONS || '))') RETURNING CONTENT) as int) as OLD_REVISIONS_max
         ,xmlcast(xmlquery(('max((' || NEW_REVISIONS || '))') RETURNING CONTENT) as int) as NEW_REVISIONS_max

from      t
;

关于sql - 使用 Oracle SQL 找出逗号分隔字符串中的最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40219867/

相关文章:

mysql - match() against() 不起作用,但像 '%$s%' 一样

oracle - 如何编写一个字段为CLOB的Oracle插入脚本?

oracle - 类似于 Oracle PL/SQL block 中的 finally Block (JAVA)

java - 一种使用Maven构建工具将plsql部署到Oracle in Java项目中的方法

sql - 如何根据现有模式在 Oracle 中编写表结构?

mysql - Oracle 等效于 MySQL 更新忽略

sql - INSERT 上的格式字符串大小写?

php - 如何在收件箱中获取最后一条消息?

oracle - 捕获 Azure 中 Oracle DB 的插入、更新和删除事件

java - 如何从 Oracle 中的 Collection (Map) 类型的 TYPE 读取值