vfp查询就像命令不起作用

时间:2012-03-12 21:00:52

标签: sql tsql sql-like visual-foxpro

SELECT iif( LIKE(sol,'EM06%'), "other",sol) as solGroup;
    FROM dpgift GROUP BY solGroup

上面应该给我一个包含唯一sol值的列。此外,以EM06开头的任何溶胶值都应分组为“其他”。但它不起作用,而是返回以下内容。

Solgroup
DM081
EM061
EM081
EM100
EM101
EM105
EM111
TM081

谁能看到我在这里做错了什么?第二行和第三行应称为“其他”。

我已多次使用此命令,之前从未这样做过。我看不出语法有什么问题,我尝试了其他变化而没有成功。我甚至尝试过铸造以防某些字段类型不起作用,但结果始终相同。

编辑:使用'*'并将通配符字符串作为第一个参数工作。我实际上已经用以下方式犯了这个错误了一段时间:

iif( (LIKE("4%",sol) OR sol = "4"),"8M","other");

like在这里什么也没做,但是我没有注意到,因为如果sol以'4'开头,'='运算符返回true(有人可以链接我对'='行为的引用吗?)。我包含sol = "4"的原因是因为我假设%表示一个或多个char而不是0或更多。 无论如何,我已经回去并将我的所有代码都更改为iif(like("wtvr*",string),stringtrue,stringfalse)

我想不推荐使用'='来比较字符串,因为它似乎没有在msdn库中提及。

1 个答案:

答案 0 :(得分:4)

另一种选择是使用“$”,AT()或ATC()

“$”表示在右侧任何地方找到左侧......

iif(“EM06”$ sol,“other”,sol)

AT()比较是否在另一个字符串中找到字符串,但IS CASE-SENSITIVE返回字符串中找到的字符位置(VFP是从1开始,而不是从零开始)

iif(at(“EM06”,sol)> 0,“other”,sol)

ATC() - 与AT()相同,但不区分大小写。

如果您特别希望“EM06”位于字符串的开头,您甚至可以进行LEFT()比较

iif(左(sol,4)=“EM06”,“其他”,sol)

甚至

iif(ATC(“EM06”,sol)= 1,“其他”,sol)

是的,这些在SQL-Select中都是有效的。