[QDB] TQDataSet 过滤表达式支持的操作符详解

TQDataSet 的 Filter 属性相比系统自带的数据表组件过滤表达式,进行了很大的增强,以方便用户使用。它支持以下操作符:

  • 常见的比较操作:=、>、>=、<、<=、!=、<>,其中 != 和 <> 等价,代表不等于
  • 模糊匹配操作:*、!*、like、nlike 分别对应 like、not like、like 和 not like 操作
  • 列表操作符:in,notin 分别对应于 in 和 not in
  • 正则表达式匹配符:~
  • 逻辑关联操作:and 和 or ,分别代表与和或
  • 括号操作符:( 和 )

TQDataSet 的 Filter 表达式扩展了 like 和 not like 操作的匹配模式,具体规则如下:

  • _ : 单个任意字符
  • * : 任意数量的任意字符
  • % : 任意数量的任意字符,与 * 等价
  • [字符列表] : 对应位置只能是列表中的字符
  • [^字符列表] 或 [!字符列表] : 对应位置不能取列表中的字符
  • \ : 符号转义
    • \r : 换行符
    • \n : 回车符
    • \b : BELL(ASCII 码 7)
    • \d : 数字(0-9,0-9)
    • \D : 非数字
    • \f : FEED(ASCII 码 12)
    • \t : Tab(ASCII 码 9)
    • \v : 垂直换行符( ASCII 码 11)
    • \s : 空白字符(全角和半角空格、换行符、回车、Tab)
    • \S : 非空白字符
    • \uXXXX : 特定的Unicode字符,XXXX 为Unicode字符的十六进制编码

如果需要更复杂的匹配规则,请使用 ~ 操作符完成正则匹配。TQDataSet 的正则表达式的匹配模式可以使用类似 JavaScript 的字符串匹配模式完成,支持以下定义:

  • i  : 忽略大小写
  • m : 多行匹配模式
  • s : 单行匹配模式
  • x : 扩展匹配模式,允许正则表达式包含额外的空白,新行或 Perl 样式的注释,所有这些都将被过滤掉
  • A : 仅在内容开始或前一次匹配的右侧才能匹配成功

其它匹配符不受支持,而直接被忽略(如 /g )。和 JavaScript 的格式类似,正则匹配的模式的字符串以斜线开始,结束于斜线加上述模式字母的组合。下面是几个简单的例子:

Id ~ ‘/cc_\d\d$/i’ : 强制在匹配时忽略大小

Id ~’/cc_\d\d/is’  : 忽略大小写,并强制单行匹配

Filter 属性的格式和SQL标准的格式很像,但要过滤的字段名始终放在前面,而且暂时不支持内嵌函数。下面是一些有效的过滤的表达式例子:

Name like ‘王%’

Age>10

Name like ‘张_%’ and Age>10

(Name like ‘张%’) and (Age<30)

Name ~ ‘张.+’

下面是无效的表达式:

10<Age

Age>Max(Age)/2

 实际过滤效果截图:

QDataSetFilter

分享到: