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版本:
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,’/’,’’))
判断/在NATURECATALOG.CATALOG_FULL_NAME 字符串中出现的次数,然后根据次数大于2,就表明最少出现了3次,然后根据
SUBSTRING_INDEX(NATURECATALOG.CATALOG_FULL_NAME, ‘/’, 3)
截取从头到第三次出现/之前的字符串
SUBSTRING_INDEX(SUBSTRING_INDEX(NATURECATALOG.CATALOG_FULL_NAME, ‘/’, 3),’/’,-1)
这个就是将上一步截取的字符串再从后向前截取
版权声明:本文为qxy15997826736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。