正则表达式IBM DB2 iSeries
谁能给我一个线索,如何在DB2iSeries中创建/调用函数正则表达式语法 例如:正则表达式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;
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时,条件
情况是否有问题