search 运算符

在多个表和列中搜索文本模式。

注意

如果你知道具体要搜索哪些表和列,使用 unionwhere 运算符会更高效。 在搜索大量的表和列时,search 运算符可能很慢。

语法

[T|] search [kind=CaseSensitivity ] [in(TableSources)] SearchPredicate

详细了解语法约定

参数

客户 类型​​ 必需 说明
T string 要搜索的表格数据源,例如表名、union 运算符或表格查询的结果。 不能与 TableSources 一起显示。
CaseSensitivity string 一个标志,它控制所有 string 标量运算符(例如 has)在区分大小写方面的行为。 有效值为 defaultcase_insensitivecase_sensitive。 选项 defaultcase_insensitive 同义,因为默认行为是不区分大小写。
TableSources string 要参与搜索的“带通配符的”表名的逗号分隔列表。 此列表具有与 union 运算符列表相同的语法。 不能与 TabularSource 一起显示。
SearchPredicate string 要对输入中的每个记录计算的布尔表达式。 如果它返回 true,则输出记录。 请参阅搜索谓词语法

搜索谓词语法

使用 SearchPredicate 可以搜索所有表列中的特定字词。 要应用于搜索字词的运算符取决于字词中是否存在星号通配符 (*) 和通配符的位置,如下表所示。

文本 运算符
billg has
*billg hassuffix
billg* hasprefix
*billg* contains
bi*lg matches regex

还可以将搜索限制为特定的列,查找完全匹配项而不是字词匹配项,或者按正则表达式进行搜索。 下表显示了其中每个案例的语法。

语法 说明
ColumnName:StringLiteral 此语法可用于将搜索限制为特定的列。 默认行为是搜索所有列。
ColumnName==StringLiteral 此语法可用于根据字符串值搜索列的完全匹配项。 默认行为是查找字词匹配项。
Columnmatches regexStringLiteral 此语法指示正则表达式匹配,其中 StringLiteral 是正则表达式模式。

使用布尔表达式合并条件并创建更复杂的搜索。 例如,"error" and x==123 将搜索在任何列中具有字词 error 且在 x 列中具有值 123 的记录。

注意

如果同时省略 TabularSource 和 TableSources,则会对范围内的数据库的所有不受限制的表和视图执行搜索。

搜索谓词语法示例

# 语法 含义(等效的 where 注释
1 search "err" where * has "err"
2 search in (T1,T2,A*) "err" 并集 T1、T2、A * |其中 * 有 "err"
3 search col:"err" where col has "err"
4 search col=="err" where col=="err"
5 search "err*" where * hasprefix "err"
6 search "*err" where * hassuffix "err"
7 search "*err*" where * contains "err"
8 search "Lab*PC" where * matches regex @"\bLab.*PC\b"
9 search * where 0==0
10 search col matches regex "..." where col matches regex "..."
11 search kind=case_sensitive 所有字符串比较都区分大小写
12 search "abc" and ("def" or "hij") where * has "abc" and (* has "def" or * has hij")
13 search "err" or (A>a and A<b) where * has "err" or (A>a and A<b)

备注

不同于find 运算符search 运算符不支持以下项:

  1. withsource=:输出将始终包含一个名为 $table 且类型为 string 的列,其值是要从中检索每个记录的表名称(或者,如果源不是一个表,而是一个复合表达式,则其值为系统生成的某个名称)。
  2. project=project-smart:此输出架构等效于 project-smart 输出架构。

示例

在数据库的所有不受限表和视图中按范围搜索某个字词。

search "Green"

输出包含来自 CustomersProductsSalesTable 表的记录。 Customers 记录显示姓氏为“Green”的所有客户,ProductsSalesTable 记录显示提到了“Green”的产品。

在数据库的所有不受限表和视图中按范围搜索与两个字词匹配的记录。

search "Green" and ("Deluxe" or "Proseware")

搜索特定表

仅在 Customers 表中搜索。

search in (Products) "Green"

在数据库的所有不受限表和视图中按范围搜索与两个字词匹配(区分大小写)的记录。

search kind=case_sensitive "blue"

搜索特定列

在数据库的所有不受限表和视图的“FirstName”和“LastName”列中按范围搜索某个字词。

search FirstName:"Aaron" or LastName:"Hughes"

按时间戳限制搜索

如果某个字词出现在日期晚于给定日期的记录中,则在数据库的所有不受限表和视图中按范围搜索该字词。

search "Hughes" and DateKey > datetime('2009-01-01')

性能提示

# 提示 Prefer Over
1 最好使用单个 search 运算符而非多个连续的 search 运算符 search "billg" and ("steveb" or "satyan") 搜索"billg" | 搜索 "steveb"或"satyan"
2 最好在 search 运算符内进行筛选 search "billg" and "steveb" 搜索 * | 其中 * 有 "billg";* 有 "steveb"