【问题标题】:vfp query like command not workingvfp 查询之类的命令不起作用
【发布时间】:2012-03-12 21:00:52
【问题描述】:
SELECT iif( LIKE(sol,'EM06%'), "other",sol) as solGroup;
    FROM dpgift GROUP BY solGroup

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

Solgroup
DM081
EM061
EM081
EM100
EM101
EM105
EM111
TM081

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

我已经多次使用过这样的命令,以前从未这样做过。我看不出语法有什么问题,我尝试了其他变体但没有成功。我什至尝试过强制转换,以防某个字段类型不起作用但结果始终相同。

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

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

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

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

【问题讨论】:

  • 也许你在EM之前有一个字符,如果你这样做iif( LIKE(sol,'%EM06%'), "other",sol)会发生什么
  • 我也试过了,没用。

标签: sql tsql sql-like visual-foxpro


【解决方案1】:

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

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

iif("EM06" $ sol, "other", sol)

AT()是比较一个字符串是否在另一个中找到,但是是区分大小写的,返回在字符串中找到的字符位置(VFP是从1开始的,不是从0开始的)

iif(at("EM06", sol) > 0, "other", sol)

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

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

iif(left(sol, 4) = "EM06", "other", sol)

甚至

iif( ATC( "EM06", sol ) = 1, "other", sol )

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

【讨论】:

  • left 和 atc 都工作得很好,谢谢。知道为什么我的 like() 不起作用吗?
  • @slicedtoad, LIKE() 使用“*”作为通配符匹配,而不是“%”
  • 哦,顺序也很重要。通配符必须放在第一个参数中。
猜你喜欢
  • 2017-11-08
  • 2014-04-11
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多