正则表达式IBM DB2 iSeries

正则表达式IBM DB2 iSeries,db2,ibm-midrange,Db2,Ibm Midrange,谁能给我一个线索,如何在DB2iSeries中创建/调用函数正则表达式语法 例如: DECLARE VAL VARCHAR (16) DEFAULT 'abcde1235876e' ; DECLARE RET INT DEFAULT 0; 我只是检查变量VAL必须只包含数值并返回true/false SET VAL = I_NEED_FUNCTION_REGEX(VAL); IF (VAL = true) THEN SET RET = 1; ELSE SET RET = 0; END IF;

谁能给我一个线索,如何在DB2iSeries中创建/调用函数正则表达式语法

例如:

DECLARE VAL VARCHAR (16) DEFAULT 'abcde1235876e' ;
DECLARE RET INT DEFAULT 0;
我只是检查变量VAL必须只包含数值并返回true/false

SET VAL = I_NEED_FUNCTION_REGEX(VAL);
IF (VAL = true) THEN
SET RET = 1;
ELSE
SET RET = 0;
END IF;
就这么简单,但我一直在IBM中搜索,如下所示:

但我不太明白

你能帮我吗


更新 现在我又回到了原来的方式,简单了

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

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

您链接的文章是如何设置UDF(用户定义函数)以调用外部(C)库来提供此功能。虽然为LUW显示了这些步骤,但iSeries版本应该大致相同;您必须说服您的DBA实现对相关库的调用。

您可以使用
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

当VAL>=0和VAL时,条件
情况是否有问题