繁体   English   中英

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

[英]Oracle SQL - select parts of a string

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

abcdef.123.txt

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

您可以使用|| 对于concat和substr -3对于右部分

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;

一个通用的解决方案,假设输入字符串恰好有两个句点. 并且您要提取第一个和第三个标记,以一个分隔. 输入字符串中“令牌”的长度可以是任意的(包括零!),并且可以包含除以外的任何字符.

select regexp_replace('abcde.123.xyz', '([^.]*).([^.]*).([^.]*)', '\1.\3') as result
  from dual;

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

说明:

  • [ ]表示匹配方括号之间的任何字符
  • ^表示不匹配括号中的字符 -因此...
  • [^.]表示匹配除以外的任何字符.
  • *表示匹配零次或多次出现,并尽可能多“贪婪”匹配)
  • ( ... )被称为子表达式 ...见下文
  • '\\1.\\3表示将原始字符串替换为第一个子表达式,然后是. ,然后是THIRD子表达式

用单个点替换点(包括点)包围的所有子字符串。 不依赖于字符串的组成部分的长度:

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

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

SQL>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM