回答

收藏

如何告诉oracle按照从Java传入的特定排序顺序进行排序?

技术问答 技术问答 257 人阅读 | 0 人回复 | 2023-09-14

这是我需要做的。! Y& \$ r* C* H' k
我在Java中有一个列表,可以将其转换为逗号分隔的ID字符串,例如“ 3,4,5,6,1,2”
% a5 G5 S5 q7 L9 a/ W我想知道是否有办法将该字符串传递给oracle,并根据该字符串的排序顺序对sql代码进行排序?: i( M' `) V. p$ H0 D% m
所以这个查询:
4 r% Y8 }& A; e+ ?- u2 {0 [select t.id
1 Z) F0 {, Y7 i, j; Ffrom t_test t
9 K/ ^5 ^9 }- N' K, k9 j2 e将导致此顺序8 B" m/ R/ m1 h4 n4 p! q
ID
% Y3 q, n- ^! J3
1 Q& }# X) U7 K5 p! i9 O! z4: H+ X6 t" D* I0 J9 q
5
4 F  Y7 Q- [2 z2 n$ J; e' P6' n1 K' H" t3 ]" O, h; @- h
1+ y8 Y' Y& p: s" E8 C( Z! t4 d
2
# `* Y0 l. a8 N% u4 v* ]5 D* C               
  Z9 y. T/ R4 v! S, C( @; z解决方案:5 F" l  a) S' T8 Y5 z5 N  `7 Z
                9 k( }' W! a% i. M9 v- C
# U4 a* d( t1 O6 v4 K7 G
' r- x3 L# O, C4 N4 p
                如果可以在Java中修改查询,则可以执行以下操作:% w+ z  I8 l  R3 Y: C( t
SELECT t.id
+ V& ]* X) p" b/ _6 ~# o7 kFROM t_test t
  p- ^% S  Q& G2 e. nORDER BY DECODE(t.id, 3, 'A', 'B') ASC,9 j0 n+ b' T( I! q
         DECODE(t.id, 4, 'A', 'B') ASC,5 Z2 E1 Z0 W) c7 r
         DECODE(t.id, 5, 'A', 'B') ASC,4 r7 C  J  ~% W+ L( d
         DECODE(t.id, 6, 'A', 'B') ASC," d% }, L+ K# F" ^5 l3 C4 U( @5 v
         DECODE(t.id, 1, 'A', 'B') ASC,
1 [* m5 \- r. R( b         DECODE(t.id, 2, 'A', 'B') ASC;7 A3 K1 p, j! S2 T6 A- U
您必须为列表中的每个元素在order by子句中放入一个解码。每次解码中的第二个参数是列表的一个元素。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则