正则表达式IBM DB2 iSeries

时间:2011-11-15 09:05:29

标签: db2 ibm-midrange

任何人都可以给我一些线索,如何在DB2 iSeries中创建/调用函数正则表达式语法。

示例:

DECLARE VAL VARCHAR (16) DEFAULT 'abcde1235876e' ;
DECLARE RET INT DEFAULT 0;

我只是检查VARIABLE VAL必须只包含数值并返回true / false

SET VAL = I_NEED_FUNCTION_REGEX(VAL);
IF (VAL = true) THEN
SET RET = 1;
ELSE
SET RET = 0;
END IF;

就这么简单,但我一直在IBM搜索如下:

  

http://www.ibm.com/developerworks/data/library/techarticle/0301stolze/0301stolze.html

但我不太明白。

你帮我吗?


更新

我现在回到过去很简单的方式。

CREATE FUNCTION TEST.VALIDATE_NUMERIC (VAL CHARACTER VARYING(1))
RETURNS INTEGER
LANGUAGE SQL
SPECIFIC TEST.VALIDATE_NUMERIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
FENCED
DISALLOW PARALLEL
NO EXTERNAL ACTION
BEGIN ATOMIC
DECLARE RET INT DEFAULT 0 ;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION , SQLWARNING , NOT FOUND

IF ( VAL IS NOT NULL ) THEN

CASE VAL
WHEN 0 THEN -- (0)
SET RET = 1 ;
WHEN 1 THEN -- (1)
SET RET = 1 ;
WHEN 2 THEN -- (2)
SET RET = 1 ;
WHEN 3 THEN -- (3)
SET RET = 1 ;
WHEN 4 THEN -- (4)
SET RET = 1 ;
WHEN 5 THEN -- (5)
SET RET = 1 ;
WHEN 6 THEN -- (6)
SET RET = 1 ;
WHEN 7 THEN -- (7)
SET RET = 1 ;
WHEN 8 THEN -- (8)
SET RET = 1 ;
WHEN 9 THEN -- (9)
SET RET = 1 ;
ELSE
SET RET = 0 ;
END CASE ;

END IF ;

RETURN RET ;  
END 
GO

感谢
MRizq

2 个答案:

答案 0 :(得分:2)

开箱即用,DB2 具有处理正则表达式的能力。 一些函数可以处理某些模式匹配,但它受到严格限制。

您链接的文章是如何设置UDF(用户定义函数)以调用外部(C)库来提供此功能。虽然LUW显示了步骤,但iSeries版本应大致相同;你将不得不与你的DBA讨论如何实现对相关库的调用。

答案 1 :(得分:1)

如果不是数字,您可以使用LOCATE(VAL, '0123456789')返回0,如果找到则可以使用数字+ 1:

CASE LOCATE(VAL, '0123456789') WHEN > 0 THEN 1 ELSE 0 END

对于多字符字符串,您可以使用以下内容:

CASE WHEN TRANSLATE(TRIM(VAL), '0', '0123456789', '0') 
    = REPEAT('0', LENGTH(TRIM(VAL))) 
THEN 1 ELSE 0 END