db2存储过程里面可以用like么

db2存储过程里面可以用like么,第1张

db2存储过程里面可以用like

DB2中的like的使用是有限制的,它不允许跟在它后面的是一个变量或者是字段,目前比较多的是:like '%测试%'这样.

因此,在函数或者是存储过程中,就不能通过窗体一个参数给like来组成动态的条件。

如果真要在函数或者是存储过程中,去搜索某个字段是否拥有某个字符串在里面,可以使用locate。

下面是locate的用法:

locate(arg1,arg2,<pos>):在arg2中查找arg1第一次出现的位置,指定pos,则从arg2的pos处开始找arg1第一次出现的位置。

下面是用该方法时的一个例子:

CREATE FUNCTION GDZJ.GETNOPASS

(ITEMNAME VARCHAR(100),

REPORTTYPE INTEGER,

RESULTID INTEGER

)

RETURNS INTEGER

SPECIFIC GDZJ.SQL091102183311900

LANGUAGE SQL

NOT DETERMINISTIC

READS SQL DATA

STATIC DISPATCH

CALLED ON NULL INPUT

EXTERNAL ACTION

INHERIT SPECIAL REGISTERS

begin atomic

--返回值0:没有该检验项目。1:有检验项目,但全部合格。2:有检验项,但有一个不合格。(只要有一个不合格就判其不合格)

DECLARE IResult INTEGER

DECLARE ICount INTEGER

set IResult=0

--REPORTTYPE:1:外单位、0:非外单位

if REPORTTYPE=1 then

set ICount=(

select count(1) from DETECT_END_INFO where

CHECK_OUT_UNIT_INFO_ID=RESULTID and locate(ITEMNAME,PROJECT_NAME)>0

end

DB2的locate和posstr

先说一下两个函数的用法

locate(arg1,arg2,<pos>)

查找arg2中第一次出现arg1的位置,指定pos,则

从arg2的pos处开始找arg1第一次出现的位置。

posstr(arg1,arg2)查看arg2在arg1中的位置

 

SELECT POSSTR('MYTEST-100',('TEST-'||A.COL_VC)) FROM T_TEST_ZRK A //error 

 

SELECT POSSTR('MYTEST-100',('TEST-' )) FROM T_TEST_ZRK A//success 

 

SELECT POSSTR('MYTEST-100',a.COL_VC) FROM T_TEST_ZRK A//error 

 

SELECT POSSTR(A.COL_VC,'2') FROM T_TEST_ZRK A//success 

 

select locate(('TEST-'||A.COL_VC),'MYTEST-100'),a.col_vc FROM T_TEST_ZRK A//success 

 

select locate(('好-'||A.COL_VC),'你好-'||a.col_vc),a.col_vc FROM T_TEST_ZRK A//success

从上面几个语句,很容易看出来。

posstr中arg2是只能是固定的str,不能使用字段代替,arg1就可以动态生成

locate中arg1和arg2都可以动态生成。

我觉得就得写个函数来做这件事情,因为DB2好像没有这种统计特定字符出现字数的函数,自己写个吧,基本算法是这样:

1.用locate函数找到逗号

2.substr函数截取逗号之后的字符串

3.调到第一步执行,直到substr取到的字符串为空


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6758293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存