oracle中REGEXP_SUBSTR方法的使用
近期在做商旅机票平台,遇到这样一个问题:
有一张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方法的使用的更多相关文章
- Oracle中REGEXP_SUBSTR函数(转)
Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','2 ...
- Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ...
- Oracle中REGEXP_SUBSTR函数(字符串转多行)
Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...
- Oracle中REGEXP_SUBSTR函数
Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...
- 记Oracle中regexp_substr的一次调优(速度提高95.5%)
项目中需要做一个船舶代理费的功能,针对代理的船进行收费,那么该功能的第一步便是选择进行代理费用信息的录入,在进行船舶选择的时候,发现加载相关船舶信息十分的慢,其主要在sql语句的执行,因为测试的时候数 ...
- oracle中merge方法
先看SQL语句:merge into employee e using emps em on (e.emp_id=em.emp_id) when matched then update set e. ...
- oracle中Update方法
1.两表(多表)关联update -- 被修改值由另一个表运算而来 update customers a set city_name=(select b.city_name from tmp_cust ...
- Oracle中decode方法的作用
DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 该函数含义如下: IF 条件=值1 THEN RETURN (翻译值1) ELSIF 条件=值2 THEN ...
- Oracle中使用REGEXP_SUBSTR,regexp_replace函数
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr ...
随机推荐
- 洛谷【P1523】旅行商的背包(算法导论 15-1) 题解
P1523 旅行商简化版 题目背景 欧几里德旅行商\((Euclidean Traveling Salesman)\)问题也就是货郎担问题一直是困扰全世界数学家.计算机学家的著名问题.现有的算法都没有 ...
- Hadoop生态圈-大数据生态体系快速入门篇
Hadoop生态圈-大数据生态体系快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.大数据概念 1>.什么是大数据 大数据(big data):是指无法在一定时间 ...
- Golang的防坑小技巧
Golang的防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名小白,在之前没有接触到编程的小伙伴,难免会踩到一些坑,比如说刚刚入门的时候你需要安装环境,学习Gol ...
- GO语言的进阶之路-爬虫进阶之路
GO语言的进阶之路-爬虫进阶之路 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分.我们今天要介绍的就是一个简单的网络爬 ...
- python自动化运维之路~DAY4
python自动化运维之路~DAY4 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模块导入方式详解. 关于Python有几种导入模块的方式,请参考我的另外一篇博客(第20 ...
- CentOS 使用 Xfce 桌面并通过 xrdp 登录
基础环境 CentOS 7.1 最小化安装 安装步骤 以下步骤,均通过ssh连接到主机进行操作. 安装桌面支持 首先安装桌面支持 yum groupinstall "Server with ...
- Newtonsoft.Json 两个Attribute含义
1.[JsonIgnore] 看名字就知道了,通过这个Attribute可以忽略序列化某个实体类字段 2.[JsonProperty("Font")] 设置序列化到json中的实际 ...
- OGR中空间叠加函数Union
在OGRLayer的对象中调用Union函数了.先看一下Union函数的原型: Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char * ...
- 第16月第31天 mongo
1. 94 brew install mongodb 95 cd ~ 96 cd Desktop/web/ 97 ls 98 mkdir mongo 99 cd mongo/ 100 ...
- 第16月第5天 performSelector afterDelay cancel dispatch_semaphore_wait
1. //不延时,可能会导致界面黑屏并卡住一会 [self performSelector:@selector(startScan) withObject:nil afterDelay:0.3]; - ...