检查用户设定的过滤条件,Like和Not Like操作符的,没加%的,强制在两边加上

本文介绍了一段针对TcxDBFilterControl组件的代码优化方法,通过对过滤条件进行特定处理,确保了LIKE操作符前后添加通配符%,提高了搜索的灵活性与准确性。
 

users cxDBFilterControl,cxFilterControlUtils,Variants;

type TmyDBFilterControl = class(TcxDBFilterControl) end;

//以下这段代码是写在哪个事件里呢?
with TmyDBFilterControl(FilterCtrl) do


  for i := 0 to RowCount - 1 do

  if (i > 0) and (Rows[i].Condition.&Operator in [fcoLike, fcoNotLike]) then

  with Rows[i].Condition do

  for j := 0 to Values.Count - 1 do

  with Values.Values[j] do begin

  if Pos('%', ValueText) = 0 then ValueText := '%' + ValueText + '%';

  if Pos('%', VarToStr(Value)) = 0 then Value := '%' + VarToStr(Value) + '%';

  end;

放在TcxDBFilterControl组件中的OnApplyFilter事件中,当用户设定好条件点击确定后,按着你的要求对每一个条件进行检测。帮其加上%

在SQL中,如果需要使用 `NOT LIKE` 操作符同时应用多个条件进行查询,可以通过 `AND` 或 `OR` 逻辑运算符将多个 `NOT LIKE` 条件组合起来。这种方式可以有效地筛选出不符合多个指定模式的数据记录。 例如,假设有一个名为 `employees` 的表,其中包含一个 `phonenumber` 字段,要求查询所有电话号码既不以 `555` 开头,也不以 `999` 开头的员工信息,可以使用如下SQL语句: ```sql SELECT * FROM employees WHERE phonenumber NOT LIKE '555-%' AND phonenumber NOT LIKE '999-%'; ``` 上述查询中的两个 `NOT LIKE` 条件通过 `AND` 运算符连接,表示只有当电话号码同时不匹配 `'555-%'` `'999-%'` 这两个模式时,才会被选中[^2]。 如果希望排除更多特定格式的电话号码,比如避免电话号码以 `123` 或 `456` 开头,则可以继续扩展条件: ```sql SELECT * FROM employees WHERE phonenumber NOT LIKE '123-%' AND phonenumber NOT LIKE '456-%' AND phonenumber NOT LIKE '555-%' AND phonenumber NOT LIKE '999-%'; ``` 在这种情况下,每增一个新的排除条件,只需要添一个新的 `AND phonenumber NOT LIKE '...'` 子句即可。 ### 使用通配符 SQL 中的 `NOT LIKE` 支持使用通配符来实现更灵活的模式匹配: - `%` 匹配任意数量(包括零个)的字符。 - `_` 匹配单个字符。 例如,要查找所有电话号码不在 `(555) 123-4567` 或 `(999) 987-6543` 格式的记录,可以编写如下查询: ```sql SELECT * FROM employees WHERE phonenumber NOT LIKE '(555) %-%' AND phonenumber NOT LIKE '(999) %-%'; ``` ### 性能注意事项 当在大型数据集上使用多个 `NOT LIKE` 条件时,需要注意性能问题。因为 `LIKE` `NOT LIKE` 操作符通常不会使用索引,尤其是在使用前导通配符(如 `%value`)的情况下。因此,对于频繁执行的查询或大规模数据集,建议考虑优化策略,例如创建合适的索引或重构查询逻辑以减少扫描的数据量。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值