Sql 如何从以数字开头的列中选择最后一句话

Sql 如何从以数字开头的列中选择最后一句话,sql,string,oracle,Sql,String,Oracle,我想得到最后一句话,它是从列中的数字开始的 示例代码: WITH q AS (SELECT '1.abc def ghi 2.sdadasd. rewtretrtr1 3. hjgjhjhgj, yo whats. 4. gog mi man. Its been' AS sentence FROM DUAL) SELECT SUBSTR(sentence, INSTR(sentence,'.',-1) + 1) FROM q; 我的输出 Its been 4. gog mi man. Its

我想得到最后一句话,它是从列中的数字开始的

示例代码:

WITH q AS (SELECT '1.abc def ghi 2.sdadasd. rewtretrtr1 3. hjgjhjhgj, yo whats. 4. gog mi man. Its been' AS sentence FROM DUAL)
SELECT SUBSTR(sentence, INSTR(sentence,'.',-1) + 1)
FROM q;
我的输出

Its been
4. gog mi man. Its been
预期产出

Its been
4. gog mi man. Its been

这在Oracle中可能吗?

这是一个很好的用例:

Regexp细分:

\d   -- a digit
\.   -- a dot
\D+  -- as many non-digit characters as possible (at least one)
$    -- end of string
REGEXP\u SUBSTR()
在字符串中搜索给定正则表达式的,并返回给定的出现次数(默认情况下为第一次出现次数)

WITH q AS (SELECT '1.abc def ghi 2.sdadasd. rewtretrtr1 3. hjgjhjhgj, yo whats. 4. gog mi man. Its been' AS sentence FROM DUAL)
SELECT REGEXP_SUBSTR(sentence, '\d\.\D+$') FROM q;
Regexp
*\d+\.
将非常匹配从字符串开头到最后一个数字后跟一个点和一个空格的所有内容
REGEXP\u REPLACE
将抑制字符串的该部分。
'n'
修饰符允许
字符与新行字符匹配

使用这个表达式,您可以得到字符串的预期部分,只减去开头的数字和点(这是最好的,因为Oracle不支持regex lookaheads…叹气)

WITH q AS (SELECT '1.abc def ghi 2.sdadasd. rewtretrtr1 3. hjgjhjhgj, yo whats. 4. gog mi man. Its been' AS sentence FROM DUAL)
SELECT REGEXP_SUBSTR(sentence, '\d\.\D+$') FROM q;
给定此输入字符串:

We have received customer approval on the 
warranty nozzle including revised ERO repairs. Please proceed with the repairs. 
Please provide photos and damage mapping when complete per customer requests." 9/12/19 MH
10. CHECKING WITH VENDOR ABOUT ECD. 9/13/19 
MH11. Per Vendor,
"Originally I quoted a 3-4 week delivery once approved. This month is shot. W
e are booked solid. We estimate a delivery date of 10/11" 9/13/19 MH
查询返回:

 Per Vendor,
"Originally I quoted a 3-4 week delivery once approved. This month is shot. W
e are booked solid. We estimate a delivery date of 10/11" 9/13/19 MH

如果你的句子可以包含数字,这是相当棘手的。但这可以在Oracle中完成:

WITH q AS (
      SELECT '1.abc def ghi 2.sdadasd. rewtretrtr1 3. hjgjhjhgj, yo whats. 4. gog mi man. Its been' AS sentence FROM DUAL union all
      SELECT '1.abc def ghi 2.sdadasd. rewtretrtr1 3. hjgjhjhgj, yo whats. 4. gog mi 3 men. Its been' AS sentence FROM DUAL 
     )
SELECT regexp_substr(sentence, '\d[.](\D|\d+[^.])*$')
FROM q;

谢谢,伙计,这有文档吗,它叫什么?欢迎@StackOne。我在回答中添加了一些解释和文档链接。您好,我尝试了一个DB Fiddle示例,它不起作用@StackOne:这与您在示例中显示的字符串完全不同。。。你在这里的预期结果是什么?这里,它类似于问题,任何以数字开始的句子,
11。根据供应商,“最初我报了一个3-4周的交货期,一经批准。这个月就要结束了。我们的订单都订满了。我们估计交货日期为10/11“9/13/19 MH
Hi Gordon,你能解释一下代码中的reg_exp部分吗?谢谢你把这个拿出来,我需要“11”的输出。@StackOne。另一个答案对这个有用吗?你接受了。