正则表达式 IBM DB2 iSeries

发布于 2024-12-15 22:09:45 字数 1477 浏览 3 评论 0原文

谁能给我一个线索,如何在 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/数据/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

谢谢
磁共振成像

Can anyone give me a clue, how to create/call function regular expression syntax in DB2 iSeries.

Example:

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

I'm just checking VARIABLE VAL must only contain numeric value and return true/false

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

as simple as that, but i've been searching in IBM as follows:

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

but i don't quite understand.

Can u help me ?


UPDATE

I'm back to the old way and simple for now.

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

Thanks
MRizq

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你怎么敢 2024-12-22 22:09:45

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

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

Out-of-the-box, DB2 does not come with the capability to handle regex. There are some functions to handle some pattern matching, but it's severly restricted.

The article you linked is how to set up a UDF (user-defined function) to call out to an external (C) library to provide this functionality. While the steps are shown for LUW, the iSeries version should be roughly equivalent; you're going to have to talk your DBAs into implementing the call out to relevant libraries.

暗藏城府 2024-12-22 22:09:45

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

You can use LOCATE(VAL, '0123456789') to return a 0 if not numeric and the digit + 1 if found:

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

For a multi-character string you can use the following:

CASE WHEN TRANSLATE(TRIM(VAL), '0', '0123456789', '0') 
    = REPEAT('0', LENGTH(TRIM(VAL))) 
THEN 1 ELSE 0 END
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文