Oracle字串欄位內的字元排序

2021-04-24 13:39:47 字數 3457 閱讀 4315

這個是狙狙的sql解法。

引用需求

今天和梁翁在群裡聊天,小傢伙突然丟擲乙個有意思的問題,那就是字串欄位內的字串排序問題,比如有列

col,

有資料'rdgs' ,

要求輸出為

'dgrs'。

oracle分析函式支援聚合:)

create

table

t_test(f

varchar2(10

));

insert

into

t_test

values

('sdffesa');

insert

into

t_test

values

('asdflkj');

insert

into

t_test

values

('ijf92');

select

f,max

(replace

(sys_connect_by_path(c,

' '),

' ',

''))f1

from(

select

f,rn,c,row_number()over(

partition

byf

order

byc)

asord

from

(select

f,decode(rn, 1

,substr(f,1,

1), 2

,substr(f,2,

1), 3

,substr(f,3,

1), 4

,substr(f,4,

1), 5

,substr(f,5,

1), 6

,substr(f,6,

1), 7

,substr(f,7,

1), 8

,substr(f,8,

1), 9

,substr(f,9,

1), 10

,substr(f,10,

1) )

asc,rn

from

t_test a ,(

select

level

rn from

dual

connectby1

=1andlevel

<=

10)b

where

length(a.f)>=b.rn))

start

with

ord=

1connect

byf=

prior

f and

ord-1=

prior

ord

group

byf;

drop

table

t_test;

/* f     f1

ijf92 29fij

asdflkj     adfjkls

sdffesa     adeffss */

後來受到小梁的啟發,修改了一下拆分字串的方法,可以把decode去掉

-- 測試環境

create

table

t_test(f

varchar2(10

));

insert

into

t_test

values

('sdffesa');

insert

into

t_test

values

('asdflkj');

insert

into

t_test

values

('ijf92');

--測試字串的拆分

select

f,substr(f,rn,1)

asc

from

t_test a ,(

select

level

rn from

dual

connectby1

=1andlevel

<=

10)b

where

length(a.f)>=b.rn

order

byf;

/* f     c

asdflkj     a

asdflkj     f

asdflkj     j

asdflkj     d

asdflkj     l

asdflkj     k

asdflkj     s

ijf92 f

ijf92 2

ijf92 i

ijf92 9

ijf92 j

sdffesa     a

sdffesa     s

sdffesa     e

sdffesa     f

sdffesa     d

sdffesa     s

sdffesa     f */

-- 測試拆分-聚合的完整語句

select

f,max

(replace

(sys_connect_by_path(c,

' '),

' ',

''))f1

from(

select

f,c,row_number()over(

partition

byf

order

byc)

asord

from

(select

f,substr(f,rn,1)

asc

from

t_test a ,(

select

level

rn from

dual

connectby1

=1andlevel

<=

10)b

where

length(a.f)>=b.rn))

start

with

ord=

1connect

byf=

prior

f and

ord-1=

prior

ord

group

byf;

drop

table

t_test;

/* f     f1

ijf92 29fij

asdflkj     adfjkls

sdffesa     adeffss */

Oracle字串欄位內的字元排序

這個是狙狙的sql解法。引用需求 今天和梁翁在群裡聊天,小傢伙突然丟擲乙個有意思的問題,那就是字串欄位內的字串排序問題,比如有列 col,有資料 rdgs 要求輸出為 dgrs oracle分析函式支援聚合 create table t test f varchar2 10 insert into ...

Oracle字串欄位內的字元排序

這個是狙狙的sql解法。引用需求 今天和梁翁在群裡聊天,小傢伙突然丟擲乙個有意思的問題,那就是字串欄位內的字串排序問題,比如有列 col,有資料 rdgs 要求輸出為 dgrs oracle分析函式支援聚合 create table t test f varchar2 10 insert into ...

字串內特殊字元處理

問題描述 輸入乙個字串,裡面包含特殊字元 對每個字串作如下處理 1.如果遇到 則刪除 之前的所有字元 包括 2.如果遇到 則刪除 之前的乙個字元 包括 問題分析 最直接的辦法,遍歷整個字串,遇到 再做相應處理,處理可以是直接刪除,但需要注意的是,如果直接刪除,刪除會改變字串大小,遍歷字串則應該注意。...