我需要選擇字符串中的第一個X字,其中x可以是0-100之間的任意數字。是否有捷徑可尋?我發現下面的例子來選擇從字符串中的第2個字:從Oracle的字符串中檢索第一個X字選擇
select regexp_replace('Hello world this is a test', '(\w+ \w+).*$','\1') as first_two
from dual
我怎麼會選擇一個字符串,其中X可以是從0到100的數第一X字?
我需要選擇字符串中的第一個X字,其中x可以是0-100之間的任意數字。是否有捷徑可尋?我發現下面的例子來選擇從字符串中的第2個字:從Oracle的字符串中檢索第一個X字選擇
select regexp_replace('Hello world this is a test', '(\w+ \w+).*$','\1') as first_two
from dual
我怎麼會選擇一個字符串,其中X可以是從0到100的數第一X字?
選擇首先結束四個字:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s){4}).*', -- Change 4 to wanted number of words here!
'\1'
)
from dual;
編輯
上述解決方案只適用於單詞分隔恰好一個空格字符。如果字是由一個或多個空格分隔,該\s
必須擴展到\s+
:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s+){4}).*', -- Change 4 to wanted number of words here!
'\1'
)
from dual;
謝謝先生工作完美!優雅的解決方 –
如果有兩個空格,會發生什麼變化?我有一個字符串,比如'Hello world這是一個測試等',它有兩個空格並且失敗。謝謝。 –
請定義「失敗」,舉例說明。 –
這將做到這一點,但它可能會有點不雅,改爲「2」字的號碼找到
select substr('this is a number of words',1,instr('this is a number of words',' ',1,2))
from dual
不承擔詞總是與空間
這種方法需要提取你想要的單詞數的結果,則有效降低了多空間來一句:
select trim(regexp_replace(regexp_substr('Hello world this is a test etc', '(([^ ]*)(|$)*){3}'), ' +', ' '))
from dual;
編輯:這是越來越醜,但圍繞它包裹TRIM()擺脫尾隨空間(最後一個詞選定後的一個)。
非常感謝。 –
它正在工作,但唯一的一點細節是它在字符串的末尾留下了額外的空間。 –
好的,我在它周圍添加了一個TRIM()調用來刪除尾部空間並更新我的帖子。附:雷內的解決方案也需要。 –
你需要什麼樣的結果?作爲單個字符串?或每個單詞一列?或每個單詞一行? –
作爲單個字符串。下面的Rene的解決方案工作,除了我有一些字符串之間有兩個空格,它是失敗的。這並不是他的錯,因爲我沒有提到這一點。 –
@羅伯特史密斯:我已經更新了我的答案,以便它可以在單詞之間有兩個(或更多)空格。 –