加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2021-04-01 13:04:06 所属栏目:百科 来源:网络整理
导读:我有一个有两列的表: OLD_REVISIONS |NEW_REVISIONS-----------------------------------1,25,26,24 |1,24,251,56,55,54 |1,541 |11,2 |11,96,95,94 |1,94,951 |11 |11 |11 |11,2 |1,21 |11 |11 |11 |1 对于每一行,都会有一个文档修订列表(以逗号分隔) 逗

我有一个有两列的表:

OLD_REVISIONS   |NEW_REVISIONS
-----------------------------------
1,25,26,24      |1,24,25
1,56,55,54      |1,54
1               |1
1,2             |1
1,96,95,94      |1,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,54

>我尝试使用MINUS选项的解决方案(将表连接到自身),但即使列表相同但顺序错误,它也会返回差异
>我尝试了GREATEST函数(即最大(new_Revisions)< great(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

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

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

docnn,count,revisions

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

我现在遇到的麻烦是现场表,新版本已经添加,所以当我使用MINUS比较主表和快照时,我会有所不同,因为
主表中的新修订版.

即使在实际表中,修订是单独的行,在快照表中我没有单独的行.

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

解决方法

请享用.

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
;

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!