zoukankan      html  css  js  c++  java
  • oracle中REGEXP_SUBSTR方法的使用

    近期在做商旅机票平台,遇到这样一个问题: 
    有一张tt_ticket表,用来存机票信息。里边有一个字段叫schedule,表示的是行程,存储格式为:北京/虹桥 
    由于公司位于上海。而上海眼下有两个机场:浦东和虹桥。所以对于出发地或到达地为上海的机票来说,行程中会存虹桥或浦东,当然。有时候可能也会直接存上海(可能性非常小。但不代表没有)。这样,行程对于出发地为上海的行程来说。可能有下面几种可能: 
    a.虹桥/北京 
    b.浦东/北京 
    c.上海/北京 
    如今要实现搜索出发城市为上海时,把这三条信息所有拉出来。 
    首先,创建一张城市地区映射表tt_ticket_city_mapper,包括字段city和mapper_city,存储下面数据:

    citymapper_city
    虹桥 上海
    浦东 上海
    上海 上海

    先解释一下: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中查询得到器映射的城市上海。假设没有的话就是它自己 
    等于号后边相同是做一下转换。


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

  • 相关阅读:
    nginx 配置https, 服务器是阿里云的ECS(亲测)
    jenkins 安装2.170版本 的问题汇中
    终于有人把“TCC分布式事务”实现原理讲明白了!
    springcloud(九) springboot Actuator + admin 监控
    springcloud(八) Hystrix监控
    springcloud(七) feign + Hystrix 整合 、
    springboot 2.0 自定义redis自动装配
    springboot 2.0 自动装配原理 以redis为例
    博文分类索引--Python
    【python】-- Ajax
  • 原文地址:https://www.cnblogs.com/kliine/p/10244281.html
Copyright © 2011-2022 走看看