Oracle SQL - 选择字符串的一部分

时间:2016-07-29 15:30:39

标签: sql oracle

如何从以下字符串中选择abcdef.txt

abcdef.123.txt

我只知道如何通过select substr('abcdef.123.txt',1,6) from dual;

选择abcdef

3 个答案:

答案 0 :(得分:2)

你可以使用|| for concat和substr -3 for right part

select substr('abcdef.123.txt',1,6)  || '.' ||substr('abcdef.123.txt',-3) from dual;

或避免连续(如Luc M建议的那样)

select substr('abcdef.123.txt',1,7)   || substr('abcdef.123.txt',-3) from dual;

答案 1 :(得分:2)

一般解决方案,假设输入字符串恰好有两个句点.并且您想要提取第一个和第三个标记,用一个.分隔"标记的长度&#34 ;在输入字符串中可以是任意的(包括零!),它们可以包含.

以外的任何字符
select regexp_replace('abcde.123.xyz', '([^.]*).([^.]*).([^.]*)', '\1.\3') as result
  from dual;

RESULT
---------
abcde.xyz

说明:

  • [ ]表示匹配括号之间的任何字符。
  • ^ 表示与括号中的字符不匹配 - 所以......
  • [^.] 表示匹配除.
  • 以外的任何字符
  • *表示匹配零或 更多事件,尽可能多"贪婪" 匹配)
  • ( ... )称为子表达式 ...见下文
  • '\1.\3表示替换原始字符串 使用第一个子表达式,然后是.,然后是第三个子表达式 子表达式

答案 2 :(得分:1)

用点替换由点(包括)包围的任何内容的子串。不依赖于字符串组件的长度:

SQL> select regexp_replace('abcdef.123.txt', '\..*\.', '.') fixed
     from dual;

FIXED
----------
abcdef.txt

SQL>