欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql和oracle截取第二个/和第三个/(最多只有3个/的字符串)之间的字符串

程序员文章站 2022-06-01 15:06:04
...

oracle版本:

SELECT NATURECATALOG.CATALOG_FULL_NAME,
       SUBSTR(NATURECATALOG.CATALOG_FULL_NAME,
              INSTR(NATURECATALOG.CATALOG_FULL_NAME, '/', 1, 2) + 1,
              INSTR(NATURECATALOG.CATALOG_FULL_NAME, '/', 2, 3) - 1 -
              INSTR(NATURECATALOG.CATALOG_FULL_NAME, '/', 1, 2))
  FROM T_RTM_CATALOG NATURECATALOG
 WHERE NATURECATALOG.CATALOG_TYPE = '4'

Oracle的截取原理是找到‘’/”第二次出现的位置,和第三次出现的位置,然后用substr()截取两个位置之间的字符串。
mysql和oracle截取第二个/和第三个/(最多只有3个/的字符串)之间的字符串
mysql版本:

SELECT 
LENGTH(NATURECATALOG.CATALOG_FULL_NAME)-LENGTH(REPLACE(NATURECATALOG.CATALOG_FULL_NAME,'/','')),
     NATURECATALOG.CATALOG_FULL_NAME,
     CASE WHEN (LENGTH(NATURECATALOG.CATALOG_FULL_NAME)-LENGTH(REPLACE(NATURECATALOG.CATALOG_FULL_NAME,'/','')))>2 
     THEN SUBSTRING_INDEX(SUBSTRING_INDEX(NATURECATALOG.CATALOG_FULL_NAME, '/', 3),'/',-1) 
     ELSE '' END AS name_
     FROM T_RTM_CATALOG NATURECATALOG WHERE NATURECATALOG.CATALOG_TYPE = '4'

Mysql版本的先根据
LENGTH(NATURECATALOG.CATALOG_FULL_NAME)-LENGTH(REPLACE(NATURECATALOG.CATALOG_FULL_NAME,’/’,’’))
mysql和oracle截取第二个/和第三个/(最多只有3个/的字符串)之间的字符串
判断/在NATURECATALOG.CATALOG_FULL_NAME 字符串中出现的次数,然后根据次数大于2,就表明最少出现了3次,然后根据
SUBSTRING_INDEX(NATURECATALOG.CATALOG_FULL_NAME, ‘/’, 3)
截取从头到第三次出现/之前的字符串
mysql和oracle截取第二个/和第三个/(最多只有3个/的字符串)之间的字符串
SUBSTRING_INDEX(SUBSTRING_INDEX(NATURECATALOG.CATALOG_FULL_NAME, ‘/’, 3),’/’,-1)
mysql和oracle截取第二个/和第三个/(最多只有3个/的字符串)之间的字符串
这个就是将上一步截取的字符串再从后向前截取

相关标签: mysql截取字符串