在SQL中,在字符之后和最终完全停止(/句点)之前提取字符串

时间:2016-03-15 15:41:33

标签: sql string oracle plsql

我想在文本字符串中提取所有字符串,包括“Th”(名为“COL_A”的列以及之前,包括最后一个完整句点(句点)。所以如果字符串是:

'3padsa1st/The elephant sat by house No.11, London Street.sadsa129'

我希望它返回:

'The elephant sat by house No.11, London Street.'

目前我有:

substr(SUBSTR(COL_A, INSTR(COL_A,'Th', 1, 1)),1,instr(SUBSTR(COL_A, INSTR(COL_A,'Th', 1, 1)),'.'))

这几乎可以工作但返回包含'Th'(右边)之后的文本,但是在第一个完整停止(句点)之前返回文本,而不是最后一个。所以它返回:

The elephant sat by house No.

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

假设你的字符串中的最后一个句号给出句号,你可以试试这样的句子:

select regexp_substr('3padsa1st/The elephant sat by house No.11, London Street.sadsa129', 
                     '(Th.*)\.')
from dual

答案 1 :(得分:2)

the INSTR docs开始,您可以使用负值position从字符串末尾向后搜索,这样就会返回上一个句号的位置:

instr (cola, '.', -1)

所以你可以这样做:

substr ( cola
       , instr (cola, 'Th')
       , instr (cola, '.', -1) - instr(cola, 'Th') + 1
       ) 

答案 2 :(得分:0)

您的代码返回字符串中第一个句点的位置。如果您希望它返回字符串中最后一个句点的位置,请尝试反转字符串,然后使用instr

我不熟悉Oracle,但为了给你一个想法,请看一下之前已经回答的SQL Server问题。

What is best way to get last indexof character in SQL 2008

答案 3 :(得分:0)

instr('string', 'char', -1)

由于位置-1,这将从{end} char中搜索string。 因此,您可以使用类似的代码来搜索'。'从最后开始。

substr(SUBSTR(COL_A, INSTR(COL_A,'Th', 1, 1)),1,instr(SUBSTR(COL_A, INSTR(COL_A,'Th', 1, 1)),'.', -1))