近期在做商旅机票平台,遇到这样一个问题:

有一张tt_ticket表,用来存机票信息。里边有一个字段叫schedule,表示的是行程,存储格式为:北京/虹桥

由于公司位于上海。而上海眼下有两个机场:浦东和虹桥。所以对于出发地或到达地为上海的机票来说,行程中会存虹桥或浦东,当然。有时候可能也会直接存上海(可能性非常小。但不代表没有)。这样,行程对于出发地为上海的行程来说。可能有下面几种可能:

a.虹桥/北京

b.浦东/北京

c.上海/北京

如今要实现搜索出发城市为上海时,把这三条信息所有拉出来。

首先,创建一张城市地区映射表tt_ticket_city_mapper,包括字段city和mapper_city,存储下面数据:

city mapper_city
虹桥 上海
浦东 上海
上海 上海

下面先把sql贴出来,是mybatis中的部分代码:

      select *
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方法的使用的更多相关文章

  1. Oracle中REGEXP_SUBSTR函数(转)

    Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','2 ...

  2. Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结

    Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ...

  3. Oracle中REGEXP_SUBSTR函数(字符串转多行)

    Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...

  4. Oracle中REGEXP_SUBSTR函数

    Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...

  5. 记Oracle中regexp_substr的一次调优(速度提高95.5%)

    项目中需要做一个船舶代理费的功能,针对代理的船进行收费,那么该功能的第一步便是选择进行代理费用信息的录入,在进行船舶选择的时候,发现加载相关船舶信息十分的慢,其主要在sql语句的执行,因为测试的时候数 ...

  6. oracle中merge方法

    先看SQL语句:merge into employee e using emps em on (e.emp_id=em.emp_id) when matched then  update set e. ...

  7. oracle中Update方法

    1.两表(多表)关联update -- 被修改值由另一个表运算而来 update customers a set city_name=(select b.city_name from tmp_cust ...

  8. Oracle中decode方法的作用

    DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 该函数含义如下: IF 条件=值1 THEN    RETURN (翻译值1) ELSIF 条件=值2 THEN   ...

  9. Oracle中使用REGEXP_SUBSTR,regexp_replace函数

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr ...

随机推荐

  1. 洛谷 P1140 相似基因(DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://www.cnblogs.com/real-l/p/9 ...

  2. mac 上传下载iterm2

    1.安装Homebrew,目的是执行 brew 命令,解决 brew: command not found问题 ruby -e "$(curl -fsSL https://raw.githu ...

  3. OSPF基础介绍

    OSPF基础介绍 一.RIP的缺陷 1.以跳数评估的路由并非最优路径 2.最大跳数16导致网络尺度小 3.收敛速度慢 4.更新发送全部路由表浪费网络资源 二.OSPF基本原理 1.什么是OSPF a& ...

  4. python---定义一个session类

    首先:注意cookie中的get_cookie是返回字符串,而get_secure_cookie返回的是字节类型 #self.get_secure_cookie() #The decoded cook ...

  5. centos7环境下安装mysql5.6-----解压安装包的方法

    参考连接:https://blog.csdn.net/qq_17776287/article/details/53536761 linux下有很多服务,如何查看服务是否启动,以mysql为例子 使用命 ...

  6. ibatis (mybatis) for循环拼接语句【转】

    使用 , 拼接 查询条件dto public class queryCondition{ private String[] stuIds; private String name;} 查询sqlMap ...

  7. Java编程思想 学习笔记5

    五.初始化与清理 1.用构造器确保初始化  在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造 ...

  8. WorkerMan 入门学习之(二)基础教程-Connection类的使用

    一.TcpConnection类 的使用 1.简单的TCP测试 Server.php <?php require_once __DIR__.'/Workerman/Autoloader.php' ...

  9. Composer 安装和使用

    1.linux下安装 curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer ...

  10. pyqt5 添加属性-类方法用属性形式访问

    方法一 装饰器法 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout,QLab ...