当前位置:Gxlcms > 数据库问题 > oracle中REGEXP_SUBSTR方法的使用

oracle中REGEXP_SUBSTR方法的使用

时间:2021-07-01 10:21:17 帮助过:73人阅读

* from tt_ticket where 1=1 <if test="departureCity !=‘‘ and departureCity !=null"> <![CDATA[ and (nvl( (select m.mapper_city from tt_ticket_city_mapper m where m.city = trim((select REGEXP_SUBSTR(t.schedule,‘[^/]+‘,1,1) from dual))) , trim((select REGEXP_SUBSTR(t.schedule,‘[^/]+‘,1,1) from dual)) ) = nvl( (select m.mapper_city from tt_ticket_city_mapper m where m.city = trim(#{departureCity}) ), #{departureCity} ) ) ]]> </if> <if test="arriveCity !=‘‘ and arriveCity !=null"> <![CDATA[ and(nvl( (select m.mapper_city from tt_ticket_city_mapper m where m.city = trim((select REGEXP_SUBSTR(t.schedule,‘[^/]+‘,1,2) from dual)) ) , trim((select REGEXP_SUBSTR(t.schedule,‘[^/]+‘,1,2) from dual)) ) = nvl( (select m.mapper_city from tt_ticket_city_mapper m where m.city = trim(#{arriveCity}) ), #{arriveCity} ) ]]> </if>

先解释一下:select REGEXP_SUBSTR(t.schedule,’[^/]+’,1,1) from dual
比方:
select REGEXP_SUBSTR(‘虹桥/北京’,’[^/]+’,1,1) from dual
返回的是虹桥
select REGEXP_SUBSTR(‘虹桥/北京’,’[^/]+’,1,2) from dual
返回的是北京
第一个參数是要解析的字符串,第二个是正在表达式,第三个表示字符串解析时的起始位置。比方:
select REGEXP_SUBSTR(‘虹桥/北京’,’[^/]+’,2,1) from dual
返回的是桥
第四个參数表示取拆分后数组里的第几个值。
这种话
nvl(
(select m.mapper_city
from tt_ticket_city_mapper m
where m.city = trim((select REGEXP_SUBSTR(t.schedule,’[^/]+’,1,1) from dual))
) ,
trim((select REGEXP_SUBSTR(t.schedule,’[^/]+’,1,1) from dual))
)
就能够取出/前面的字符串,比方浦东或虹桥,然后在 tt_ticket_city_mapper中查询得到器映射的城市上海。假设没有的话就是它自己
等于号后边相同是做一下转换。


当然,看到这,肯定会有人说为什么不直接存出发城市和到达城市两个字段?那是由于行程可能是 北京/香港/迈阿密/香港/北京 这种数据。


关于这种数据怎么处理。还没有搞,只是在网上大致看了一下。应该是利用存储过程里边操作比較方便
大家有什么方法能够分享一下哦

oracle中REGEXP_SUBSTR方法的使用

标签:dcl   javascrip   位置   问题:   and   this   length   问题   相同   

人气教程排行