2017-02-22 107 views
1

我有一个像下面的字符串,我需要得到它10472314。这是最后一个字,但在这种情况下是一个字。你能让我知道如何在PL/SQL块中获取它吗?任何字符串函数?如何获取字符串中的第二个单词?

processed "SCOTT"."PRINCE05"       10472314 rows 

@ UPDATE

最后,我设法建立使用字符串函数的解决方案。

SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
+0

如果你是诚实的,你会承认,如果你再次阅读这个问题(假装你不知道它是什么),它甚至对你来说都没有意义。对美国来说它应该如何有意义? “串中的行数”是什么意思?这与“如何获得**特定字**”(你的标题)有什么关系? – mathguy

+0

感谢您的评论。我修改了标题和陈述。抱歉让你困惑。 – Sigularity

+0

好的 - 我假设你的意思是“倒数第二”字(意思是字符串末尾的第二个字)。这就是你总是需要的,字符串中的倒数第二个字?你怎么定义“单词” - 任何由空格(或空格,制表符,换行符 - 通常称为“空白”)分隔的任何东西? – mathguy

回答

0

如果我们在INSTR中使用'-1'魔术选项,那么我们可以按相反顺序搜索字符串。通过这样做,我相信我们可以找到最后一个词,但下面的一个。 它看起来很脏,但它只适用于我。

SELECT SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
FROM prince_test; 

INSTR(name, ' ', -1 , 2) + 1 ==> the second occurrence of SPACE 
INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2) ==> position gap between the first occurrence and the second. 
1

在所述串的端部的集合的单词 '行' 之前的数字:

regexp_replace(text, '^(.+)([0-9]+)(rows)$', '\2') 

第三字:

regexp_substr(text, '\S+', 1, 3) 

第二最后字(在Ñ th word其中n =字数-1):

regexp_substr(text, '\S+', 1, regexp_count(text,'\S+') -1) 

如果您正在处理大量的行,则正则表达式函数可能会很慢。您必须做出的权衡是在正则表达式的表达性和简单substrinstr的表现之间。我个人更喜欢正则表达式,除非有明确的性能问题。

+0

它的工作原理。感谢您的评论。 – Sigularity

相关问题