回答

收藏

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

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

这是我需要做的。
. x- ]; e4 W; u/ ~我在Java中有一个列表,可以将其转换为逗号分隔的ID字符串,例如“ 3,4,5,6,1,2”& i- c6 m) t3 K( y  B" H- V
我想知道是否有办法将该字符串传递给oracle,并根据该字符串的排序顺序对sql代码进行排序?
: S0 Y7 q' w& `6 a# v- N2 Z0 f, x所以这个查询:
, ?9 w* |6 b# {, p' {select t.id* f+ K3 l$ N4 ?% d7 J* o
from t_test t
! X: n% V$ E( N9 Z. V+ T) C! B将导致此顺序& i: F! U- e  Z' b8 @& M
ID
' @, V6 U. @& B" _$ P3' ~+ ~. M! T* M: W
4
$ g0 p1 [; K9 |/ {. s5* F! y) t2 c. \- @* x( Z7 D
68 ^9 D( }+ }( s# R' p
1: X8 Z) Y& \( H6 r  |* d/ e
2
1 @( {( ~# V# V- }2 Q) w8 r6 [                ( k8 E" H+ ?8 c6 i+ F. g
解决方案:6 ]# d& ~+ V2 G( |# X
                6 D' e3 n" z7 X0 X
' e1 Q0 ]% L3 [

% k+ c" E8 T. V6 v& o  j                如果可以在Java中修改查询,则可以执行以下操作:
/ e5 v) J  f; h1 R; |* rSELECT t.id# B. t+ m$ f$ P: m: w, T3 h. s2 _$ l
FROM t_test t
0 t& M* w* `& _; Z, L7 z5 V% i( TORDER BY DECODE(t.id, 3, 'A', 'B') ASC,1 V' G7 `. E4 B. O9 s- K
         DECODE(t.id, 4, 'A', 'B') ASC,4 u  O6 C1 K0 _  _
         DECODE(t.id, 5, 'A', 'B') ASC,
3 k, B. {. X3 A         DECODE(t.id, 6, 'A', 'B') ASC,3 O$ v! v4 I" C& }
         DECODE(t.id, 1, 'A', 'B') ASC,
# I' r" J& o) v. a6 S3 U         DECODE(t.id, 2, 'A', 'B') ASC;8 a7 M$ V8 v0 d& v2 m" a) p
您必须为列表中的每个元素在order by子句中放入一个解码。每次解码中的第二个参数是列表的一个元素。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则