进度4gl匹配查询

时间:2014-12-24 14:27:07

标签: progress-4gl openedge

我遇到了Progress的问题,我们通常的程序员就是假期,我对系统一无所知。我需要得到一个不属于这些代码之一的分支列表[“AXD”,“BOD”,“CLA”,“CNA”,“CTS”,“NOB”,“OFF”,“ONA”,“PRJ” ”, “WVL”]。

我尝试了for each removals where r-brchdisplay not(matches ["AXD","BOD","CLA","CNA","CTS","NOB","OFF","ONA","PRJ","WVL"]). display rpid.

但这种语法显然是错误的。 感谢

1 个答案:

答案 0 :(得分:0)

方括号不是语法的正确部分。

匹配将一个字符串与另一个字符串匹配 - 而不是一组选项。即。

not ( r-brchdisplay matches "axd" or r-brchdisplay matches "bod" or ... )

使用MATCHES也有点愚蠢,因为这些是没有通配符的相等比较。 MATCHES通常在涉及到外卡时使用。

MATCHES在WHERE子句中通常也是一个非常非常糟糕的主意,因为它可以保证表扫描。

编写WHERE子句的其他方法:

not ( r-brchdisplay = "axd" or r-brchdisplay = "bod" or ... )

r-brchdisplay <> "axd" and r-brchdisplay <> "bod" and ...

LOOKUP()更接近你可能需要的东西:

for each removals no-lock where
  lookup( r-brchdisplay, "axd,bod,cla,cna,cts,nob,off,ona,prj,wvl" ) = 0:
  /* do something... */
end.

(&#34; = 0&#34;表示LOOKUP找不到目标字符串...)