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版本:
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)
这个就是将上一步截取的字符串再从后向前截取