繁体   English   中英

在整个记录中搜索特定字符串 - RPGFREE IBM i 系列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM