新聞中心
近年來,我們專注于提供全系列企業級性能管理方案和相關的IT服務,在幫助用戶提高業務效率和整體生產力的同時,降低運營和運維成本。
返回列表
首頁 / 新聞資訊 / 公司動態
干貨 | Oracle 中 REGEXP_SUBSTR函數搜索格式化字段的值(橫向豎向顯示所有值)
來源:   日期:2018-12-29

一、需求分析

最近碰到一個需求,業務系統某個表的某個字段值(比如1,2,3,4,5,6,7,8,9,10)比較特殊,里面包含了以固定字符(比如逗號",")分割的值,業務系統希望格式化查詢這個字段的值。



二、解決方案

在oracle里面搜索可以使用正則表達式函數,Oracle中支持正則表達式的函數主要有下面四個:

REGEXP_LIKE:與LIKE的功能相似
REGEXP_INSTR:與INSTR的功能相似
REGEXP_SUBSTR:與SUBSTR的功能相似
REGEXP_REPLACE:與REPLACE的功能相似
它們在用法上與Oracle函數LIKE、INSTR、SUBSTR和REPLACE用法相同,但是它們使用POSIX正則表達式代替了老的百分號(%)和通配符(_)字符。



三、REGEXP_SUBSTR函數使用說明


REGEXP_SUBSTR語法圖

2323.png


REGEXP_SUBSTR插圖描述:
REGEXP_SUBSTR(source_char, pattern
              [, position
                 [, occurrence
                    [, match_param
                       [, subexpr
                       ]
                    ]
                 ]
              ]
             )



四、使用案例


創建測試表
create table xxx (c1 varchar2(100));
select * from xxx;


插入測試數據
insert into xxx values('1,2,3,4,5,6,7,8,9,10');

SQL> --格式化查詢數據
SQL> select c1 from xxx;
C1


1,2,3,4,5,6,7,8,9,10

SQL> --格式化查詢數據-,分割第1個個值
SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,1,'i') AS STR FROM xxx;
STR


1

SQL> --格式化查詢數據-,分割第2個個值
SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,2,'i') AS STR FROM xxx;
STR


2
SQL> --格式化查詢數據-,分割第3個個值
SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,3,'i') AS STR FROM xxx;
STR


3
SQL> --格式化查詢數據-,分割第3個個值,橫向顯示
SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,1,'i') v1,REGEXP_SUBSTR(c1,'[^,]+',1,2,'i') v2,REGEXP_SUBSTR(c1,'[^,]+',1,3,'i') v3 FROM xxx;
V1 V2 V3


1 2 3
SQL> --格式化查詢數據-,分割所有值,豎向顯示,使用connect函數
SQL> SELECT REGEXP_SUBSTR(c1, '[^,]+', 1, LEVEL, 'i') AS STR
2 FROM xxx
3 CONNECT BY LEVEL <= LENGTH(c1) - LENGTH(REGEXP_REPLACE(c1, ',', ''))+1;
STR


1
2
3
4
5
6
7
8
9
10
10 rows selected

SQL>


xiaoshouyi.jpg



|  北京    |    上海    |   廣州    |   成都    |


4008-906-960

4008-906-960

全國免費咨詢電話
  • 官方微博
  • 官方微信
Copyright 1998-2016 版權所有 北京東方龍馬軟件發展有限公司 京ICP備14000200號-1
bet365体育备用器 彩票开奖开奖结果查询 一波中特公式计算法 足彩胜负彩最新对阵表 千旺彩票苹果 迅雷赚钱宝改账号 新疆25选7开奖公告 股票融资技巧_杨方配资开户 浙江11选5中奖规则 网球比分规则与打法 植物大战僵尸赚钱法