DB2实现正则表达式

DB2实现正则表达式

功能描述

db2 11.1 及以上版本支持正则表达式,但是db2 10.5及以下版本不支持正则表达式,需要手工创建正则表达式函数。

安装与卸载步骤

================================================================================
== README.txt
==
== 2010-07-30
== IBM IMTE - Project Avalanche
==
== Author: Alexandre Grancher
==
================================================================================

This file describes the set of instructions to follow to deploy or to re-deploy
the DB2 regular expressions package.


Context
-------
Oracle gives the ability to its users to use regular expresssions functions to 
perform pattern matching directly in their SQL statements.

DB2 does not do that natively. Therefore, we have developped a JAVA class to 
implement an API which does pattern matching.
DB2 uses JAVA routines to bind with the implemented JAVA functions.

Enablement
----------

1- Save attached db2_regex.zip file to a new folder on the hard disk for example 
     to C:\avalanche
2- Extract all files from the zip file to C:\avalanche\db2_regex
3- Open C:\avalanche\db2_regex\scripts\sql\db2_regex_functions.sql.
4- Edit the script to suit your environment, you will need to :
        4.1- On the first line, change the database name from DB2MIGR to whatever 
             database you are using
        4.2- On the second line, you will need to change the directory name. 
             If you are using unix the syntax should be something like : 
             CALL SQLJ.INSTALL_JAR('file:/tmp/avalanche/db2_regex/lib/db2_regex.jar', db2_regex);

5- In a DB2 command line processor window, run : 
     \>db2 connect to  user  using 
     \>db2 set current schema='REGEXP'
     \>db2 -td@ -vf C:\avalanche\db2_regex\scripts\sql\db2_regex_functions.sql

If you have already deployed the package and you want to deploy it again (for 
instance you have modified the JAVA code and you want to try the updated code),
then consider the following set of instructions.

1- Extract the zip file into C:\avalanche\db2_regex
From a db2 command window :
2- db2 connect t to  user  using 
3- db2 set current schema='REGEXP'
4- db2 drop function REGEXP_LIKE
5- db2 drop function REGEXP_REPLACE
6- db2 drop function REGEXP_SUBSTR
7- db2 drop function REGEXP_INSTR
8- db2 call SQLJ.REMOVE_JAR(db2_regex)
9- db2stop force
10- db2start
11- db2 connect to  user  using 
12- db2 set current schema='REGEXP'
13- db2 -td@ -f C:\avalanche\db2_regex\scripts\sql\db2_regex_functions.sql
14- Make sure that no error was raised at any point.


API
---

The API to the 4 methods is as follows, they closely follow the syntax for the 
Oracle functions defined in http://www.regular-expressions.info/oracle.html.

INTEGER REGEXP_LIKE(SOURCE VARCHAR(3000), REGEX VARCHAR(512), MODE VARCHAR(3))

VARCHAR(3000) REGEXP_REPLACE(SOURCE VARCHAR(3000), 
                             REGEX VARCHAR(512), 
                             REPLACEMENT VARCHAR(3000), 
                             POSITION INTEGER,
                             OCCURRENCE INTEGER,
                             MODES VARCHAR(3))

VARCHAR(3000) REGEXP_SUBSTR(SOURCE VARCHAR(3000),
                             REGEX VARCHAR(512),
                             POSITION INTEGER,
                             OCCURRENCE INTEGER,
                             MODES VARCHAR(3))

INTEGER REGEXP_INSTR(SOURCE VARCHAR(3000),
                     REGEX VARCHAR(512),
                     POSITION INTEGER,
                     OCCURRENCE INTEGER,
                     ROPT INTEGER,
                     MODES VARCHAR(3))

Further details of each of the parameters passed to the above functions can 
used can be found as Java documentation in 
C:\avalanche\db2_regex\doc\index.html.


Examples
--------

select ID from REGEXP.REGEXP_STRINGS where REGEXP_LIKE(STRING, '^.EF[ ]+SAVEALIAS[ ]+[0-9]+', 'c') > 0

select ID from REGEXP.REGEXP_STRINGS where REGEXP_REPLACE(STRING, '^.EF[]+SAVEALIAS[ ]+[0-9]+', 'XX', 1, 1, 'c')='XX'

select ID from REGEXP.REGEXP_STRINGS where REGEXP_SUBSTR(STRING, '^.EF[ ]+SAVEALIAS[ ]+[0-9]+', 1, 1, 'c')='DEF SAVEALIAS 2210'

select ID from REGEXP.REGEXP_STRINGS where REGEXP_INSTR(STRING, '^.EF[ ]+SAVEALIAS[ ]+[0-9]+',1, 1, 1, 'c') > 0

---------------------------------

常用正则表达式

- 手机规则:
  规则:手机号以1[3|4|5|6|7|8|9]开头,位数为11位数字
  示例:13012345678
  表达式:^[1][3,4,5,6,7,8,9][0-9]{9}$

- 电话
  规则:电话号码可以存在3~4位区号,使用“-”分隔,后面为7~8位数字;
  示例:有区号:010-12345678  无区号:12345678
  正则表达式:^([0-9]{3,4}-)?[0-9]{7,8}$

- 身份证
  简单规则:15位或18位数字,或17位数字+大写字母X,其他规则自行调整;
  正则表达式:(^\d{15}$)|(^\d{17}(\d|X)$)

你可能感兴趣的:(db2,正则表达式,db2,db2_regex)