[英]Searching entire record for specific string - RPGFREE IBM i Series
我正在尝试将我们数据库中的特定客户类型从字符客户类型“05”更正为字符客户类型“09”。 我需要遍历数据库并找到客户名称 ex.“Gas Station 123”,然后将找到的每条记录的客户类型更改为“09”。 我一直遇到的问题是如何在每条记录的客户名称中找到部分字符串。 任何帮助,将不胜感激。
`
Dcl-F CUSTMST Keyed Usage(*INPUT:*OUTPUT:*UPDATE);
Dcl-S CUSTNM Uns(10);
SETLL 80000 Custmst;
READ CUSTMST;
DoW not %EoF(CUSTMST);
If CUSTNM = %CHECK('GAS STATION 123':BL2LN1);
CSTYP = %REPLACE('09':'05');
ENDIF;
UPDATE CUSTREC;
READ CUSTMST;
ENDDO;
Return;
`
我试过 %scan 和 %check 但得到“操作数与运算符类型不兼容”。 我可以将一个 uns 变量分配给 function 以消除错误,但随后找不到任何东西。 我一直在寻找任何一种允许部分字符串搜索但没有成功的通配符 function。
搜索部分字符串的 function 是 %scan
%SCAN(search argument : source string {: start position {: length}})
在你的代码中:
If %scan('GAS STATION 123':BL2LN1) > 0;
注意:你对 %replace 的使用很奇怪,你为什么不直接赋值 CSTYP = '09'?
使用 SQL,您甚至有更多的模式匹配选项。 确保安装了 Unicode 的国际组件,这是一个免费的操作系统选项,它是选项 39。然后您可以在 SQL 代码中包含正则表达式。 这记录在DB2 SQL 参考手册中。
select *
from custmst
where regexp_like(custnm, 'gas station [0-9]{3}', 1, 'i')
这将获取任何包含“gas station”后跟一个空白和 3 个数字的客户名称。 'i'
是一个标志,表示不区分大小写的搜索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.