我想在文本字符串中提取所有字符串,包括“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.
提前感谢您的帮助!
答案 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问题。
答案 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))