我遇到了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.
但这种语法显然是错误的。 感谢
答案 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找不到目标字符串...)