oracle 12c - 在最后一次出现字符后选择字符串

use*_*907 9 sql string oracle oracle12c

我有以下字符串:

ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence
Run Code Online (Sandbox Code Playgroud)

所以我想选择,Sentence因为它是最后一个时期之后的字符串.我怎样才能做到这一点?

Gor*_*off 15

您可以使用复杂的正则表达式执行此操作.我喜欢以下方法:

select substr(str, - instr(reverse(str), '.') + 1)
Run Code Online (Sandbox Code Playgroud)

没有什么比测试更能看到当字符串结束时这不起作用.关于 - 0 = 0的事情.这是一个改进:

select (case when str like '%.' then ''
             else substr(str, - instr(reverse(str), ';') + 1)
        end)
Run Code Online (Sandbox Code Playgroud)

编辑:

当我在本地Oracle和SQL Fiddle中运行它时,您的示例都有效.

我正在运行此代码:

select (case when str like '%.' then ''
             else substr(str, - instr(reverse(str), '.') + 1)
        end)
from (select 'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence' as str from dual) t
Run Code Online (Sandbox Code Playgroud)


Fra*_*itt 15

为了完整起见,这里有一个使用正则表达式的解决方案(不是很复杂的恕我直言:-)):

select regexp_substr(
  'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence',
  '[^.]+$') 
from dual
Run Code Online (Sandbox Code Playgroud)

正则表达式

  • 使用否定的字符类来匹配除点之外的任何内容 [^.]
  • 添加量词+以匹配其中的一个或多个
  • 使用锚点$来限制匹配到字符串的结尾