回答

收藏

Oracle函数以无序方式比较字符串

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

我需要一个函数来在两个字符串之间进行比较,而不必考虑oracle中的顺序。即“ asd”和“2 ?8 L& E; \3 K  U+ K9 F* y
sad”应被视为相等。有类似的功能吗?还是我需要编写自己的函数?
& T) d) f) J( h: T% W) j               
6 R7 t( m$ P4 _( b* N: P' y' y# f1 S- r  w解决方案:; r6 @) C8 e% `! I# T
               
) Z$ P5 u8 I+ y/ D" q
1 f0 P' o1 p$ C6 e; `
' B8 o7 o4 W) ^: G6 R& M8 R% x                可以使用一个简单的Java函数按字母顺序对字符串的字符进行排序:
4 B  ?7 T! Z. u7 ]: ACREATE AND COMPILE JAVA SOURCE NAMED SORTSTRING AS" D  f1 @5 D) e# F. R
public class SortString {
# G  g* {- u: S8 g1 Z& E# }; K  public static String sort( final String value )& S" a7 Y1 s1 j$ @+ E
  {
$ ]7 J) R, ?, L8 k/ m    final char[] chars = value.toCharArray();
. m3 M! Z. j, [. ]' ?7 E: x    java.util.Arrays.sort( chars );
& w5 \, C2 X3 U+ V7 B7 {6 I" U8 v    return new String( chars );
, A# t3 [8 O% W7 w/ |' p  }) a; ]# b* @( J2 _
};
( I. A( f5 x1 @/
0 i# X8 a6 D" t6 p0 s  R然后,您可以创建一个PL / SQL函数来调用:
* Z& i( t) \& T/ K/ @, E1 MCREATE FUNCTION SORTSTRING( in_value IN VARCHAR2 ) RETURN VARCHAR2
( b$ D- R# n4 P8 [2 jAS LANGUAGE JAVA NAME 'SortString.sort( java.lang.String ) return java.lang.String';
3 k) t! q9 b$ V3 t* n4 @. ~/
( j3 w5 m# ?8 z  j" ]然后,您可以对排序后的字符串进行简单比较:6 l/ d2 h% E  U4 _8 t
SELECT CASE
4 x( y0 G) I: [# d       WHEN SORTSTRING( 'ads' ) = SORTSTRING( 'das' )% ]' q' b* |$ u( I$ y9 b) @
       THEN 'Equal'2 T5 H3 y* p$ H# ^
       ELSE 'Not Equal'
: s2 ]/ x& |* m" W& E       END
/ u7 C( \0 Z. y* O8 K6 `* PFROM   DUAL;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则