oracle板塊的乙個帖子小糾結了一下

2021-06-03 13:00:22 字數 1950 閱讀 5037

帖子內容 

表:字段:name id

aaa 1,2,3

bbb 1,2

結果:name id

aaa 1

aaa 2

aaa 3

bbb 1

bbb 2

(蘭蘭)

select

name,regexp_substr(id,

'[^,]+',

1,n)

from

test_a

left

join (

select

level

,rownum n

from

dual connect

bylevel

<

10) on1

=1where

regexp_substr(id,

'[^,]+',

1,n)

isnot

null

在大神級別的同事幫助下終於是搞明白了,哈哈,小自豪下,下面進入主題

首先來看

select

level

,rownum n

from

dual connect

bylevel

<10

該結果為:

level                 n

1                          1

2                         2

3                         3

4                         4

5                         5

6                         6

7                         7

8                         8

9                         9

這樣就應該知道

select

name,id

from

test_a

left

join (

select

level

,rownum n

from

dual connect

bylevel

<

10) on1

=1的結果是什麼了!

在來看regexp_substr(id,'

[^,]+',

1,n)

regexp_substr是同過正規表示式來拆分字串的函式,用法見

看"[^,]+"這條正規表示式,其作用就是從字串的開始位置進行匹配","

比如"2,3,4,5,6"

當第一次查詢,也就是dual查詢結果中的第一條記錄,即n=1,那麼就是regexp_substr(id,'

[^,]+',

1,1)    —— 結果為2

當第三次查詢,也就是dual查詢結果中的第一條記錄,即n=3,那麼就是regexp_substr(id,'

[^,]+',

1,3)    ——結果為4

當第6次查詢,也就是dual查詢結果中的第一條記錄,即n=6,那麼就是regexp_substr(id,'

[^,]+',

1,6)    ——結果為空,此時不滿足

where

regexp_substr(id,

'[^,]+',

1,n)

isnot

null

的條件,故不計入結果

進而實現了字串的分割,也實現的對結果的過濾,實現了題目的需求。

但仍有一點不太懂,如果輸入的id中的","個數超過10個呢??

正規表示式我也不太熟,具體看參照

別問我connect by

看了乙個帖子後的感想

大學主要就是打基礎。這是我的基本認識。至於這些基礎知識以後會不會用上,那是另外一回事。可能很多人一輩子也用不上。但是,從事某些工作,做某些應用時,也許會用到某些基礎知識,到時候再補就麻煩了。舉個例子,編譯原理,可能很多人會覺得沒有用。筆者在工作中碰到過乙個需求,寫個問卷調查的程式,要求若第1題答a,...

論壇裡面的乙個帖子

作為專案經理一定要關注計畫和跟蹤,控制好工期和質量 要培養好乙個團隊。自己要思考,這個專案做下來,自己能得到什麼?組員能得到什麼?公司能得到什麼?想清楚了再做?其實很多事情在接收專案的時候就要想到的。剛做專案經理慢慢來,一點一點學嘛!抓緊學習專案管理的理論知識。雖說理論不一定有用,但是理論可以指導你...

北郵人論壇的乙個帖子

發信人 liu487639 年輕有為小正太 信區 feeling 標 題 re 生命不是拿來作孽的 發信站 北郵人論壇 tue oct 13 16 22 43 2015 站內 生命真的應該有點擔當,不擔當點什麼,生命太輕了,輕到你留不下任何一點東西 生為子女,父母的恩情報了麼?我一直覺得唯一讓人割捨...