比较运算符用于判断参数的大小关系,适用于任意可比较的数据类型(double、bigint、varchar、timestamp和date)。本文介绍比较运算符的基本语法以及示例。
比较运算符概览
日志服务支持如下比较运算符。
|
运算符 |
语法 |
说明 |
支持SQL |
支持SPL |
|
x < y |
x小于y时,返回true。 |
√ |
√ |
|
|
x > y |
x大于y时,返回true。 |
√ |
√ |
|
|
x <= y |
x小于或等于y时,返回true。 |
√ |
√ |
|
|
x >= y |
x大于或等于y时,返回true。 |
√ |
√ |
|
|
x = y |
x等于y时,返回true。 |
√ |
√ |
|
|
x <> y |
x不等于y时,返回true。 |
√ |
√ |
|
|
x != y |
x不等于y时,返回true。 |
√ |
√ |
|
|
x relational operator ALL(subquery) |
x满足所有条件时,返回true。 |
√ |
× |
|
|
x relational operator ANY(subquery) |
x满足任意一个条件时,返回true。 |
√ |
× |
|
|
x BETWEEN y AND z |
x处在y和z之间时,返回true。 |
√ |
√ |
|
|
x IS DISTINCT FROM y |
x不等于y时,返回true。 |
√ |
× |
|
|
x IS NOT DISTINCT FROM y |
x等于y时,返回true。 |
√ |
× |
|
|
x LIKE pattern [escape 'escape_character'] |
用于匹配字符串中指定的字符模式。字符串区分大小写。 |
√ |
√ |
|
|
x relational operator SOME(subquery) |
x满足任意一个条件时,返回true。 |
√ |
× |
|
|
GREATEST(x, y...) |
查询x、y中的最大值。 |
√ |
× |
|
|
LEAST(x, y...) |
查询x、y中的最小值。 |
√ |
× |
|
|
x IS NULL |
x为null时,返回true。 |
√ |
√ |
|
|
x IS NOT NULL |
x不为null时,返回true。 |
√ |
√ |
基础运算符
基础运算符用于比较x和y的大小关系。如果逻辑成立,则返回true。
-
语法
语法
说明
x < y
x小于y
x > y
x大于y
x <= y
x小于或等于y
x >= y
x大于或等于y
x = y
x等于y
x <> y
x不等于y
x != y
x不等于y
-
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
y
参数值为任意可比较的数据类型。
-
返回值类型
boolean类型。
-
示例
-
示例1:查询昨天的日志。
-
查询和分析语句
* | SELECT * FROM log WHERE __time__ < to_unixtime(current_date) AND __time__ > to_unixtime(date_add('day', -1, current_date)) -
查询和分析结果:查询结果返回日志的多个字段,包括
body_bytes_sent、client_ip、host、http_user_agent、http_x_forwarded_for、instance_id、instance_name、network_type、owner_id、referer。每条日志记录展示请求体大小、客户端 IP、访问域名、User-Agent、实例 ID 与名称、网络类型等访问信息。
-
-
示例2:电商公司A通过访问日志中的mobile字段和client_ip字段,分析哪些客户的电话号码所在地和其访问电商网站的IP地址所在地不同。
-
字段样例
mobile:1881111**** client_ip:192.168.2.0 -
查询和分析语句
* | SELECT mobile, client_ip, count(*) AS PV WHERE mobile_city(mobile) != ip_to_city(client_ip) AND ip_to_city(client_ip) != '' GROUP BY client_ip, mobile ORDER BY PV DESC -
查询和分析结果:查询结果返回两条记录,
mobile和client_ip列敏感信息已脱敏显示,对应PV值分别为 13 和 12。
-
-
ALL运算符
ALL运算符用于判断x是否满足所有条件。如果满足,则返回true。
-
语法
x relational operator ALL(subquery) -
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
比较运算符
<、>、<=、>=、=、<>、!=
重要ALL运算符必须紧跟在基础运算符(<、>、<=、>=、=、<>、!=)后面。
subquery
SQL子查询。
-
返回值类型
boolean类型。
-
示例
实例i-01相关的所有请求的状态码是否都为200。
-
字段样例
instance_id:i-01 status:200 -
查询和分析语句
* | select 200 = ALL(select status where instance_id='i-01') -
查询和分析结果返回
_col0值为false,表示并非所有 instance_id 为 i-01 的日志的 status 值都等于 200。
-
ANY运算符
ANY运算符用于判断x是否满足任意一个条件。如果满足,则返回true。
-
语法
x relational operator ANY(subquery) -
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
比较运算符
<、>、<=、>=、=、<>、!=
重要ANY运算符必须紧跟在比较运算符(<、>、<=、>=、=、<>、!=)后面。
subquery
SQL子查询。
-
返回值类型
boolean类型。
-
示例
实例i-01相关的请求中,是否存在请求状态码为200的请求。
-
字段样例
instance_id:i-01 status:200 -
查询和分析语句
* | SELECT 200 = ANY(SELECT status WHERE instance_id='i-01') -
查询和分析结果返回单列
_col0,值为true,表示满足条件。
-
BETWEEN运算符
BETWEEN用于判断x是否处在y和z之间。如果是,则返回true。y和z之间的范围为闭区间。
-
语法
x BETWEEN y AND z -
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
y
参数值为任意可比较的数据类型。
z
参数值为任意可比较的数据类型。
重要-
x、y和z的数据类型必须一致。
-
x、y和z中任意一个的值包含null,则返回结果为null。
-
-
返回值类型
boolean类型。
-
示例
-
示例1:判断status字段值是否在[200,299]范围内。
-
查询和分析语句
* | SELECT status BETWEEN 200 AND 299 -
查询和分析结果:返回表格中
_col0列共三行,值均为true,表示对应日志的 status 字段值均在 200 到 299 之间。
-
-
示例2:计算status字段值不在[200,299]范围内的日志条数。
-
查询和分析语句
* | SELECT count(*) AS count FROM log WHERE status NOT BETWEEN 200 AND 299 -
查询和分析结果显示 count 值为 250。
-
-
DISTINCT运算符
DISTINCT运算符用于判断x和y是否相同。
-
语法
-
IS DISTINCT FROM表示x不等于y时,返回true。
x IS DISTINCT FROM y -
IS NOT DISTINCT FROM表示x等于y时,返回true。
x IS NOT DISTINCT FROM y
-
-
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
y
参数值为任意可比较的数据类型。
与基础运算符(=、<>)对比,区别在于DISTINCT运算符可用于null的对比。
|
x |
y |
x = y |
x <> y |
x IS DISTINCT FROM y |
x IS NOT DISTINCT FROM y |
|
1 |
1 |
true |
false |
false |
true |
|
1 |
2 |
false |
true |
true |
false |
|
1 |
null |
null |
null |
true |
false |
|
null |
null |
null |
null |
false |
true |
-
返回值类型
boolean类型。
-
示例
将0和null进行对比。
-
查询和分析语句
* | select 0 IS DISTINCT FROM null -
查询和分析结果为
true,即0与null是不同的值。
-
LIKE运算符
LIKE运算符用于匹配字符串中指定的字符模式。字符串区分大小写。
-
语法
x LIKE pattern [escape 'escape_character'] -
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
pattern
字符模式,包括字符串和通配符。通配符说明如下:
-
百分号(%)代表任意个字符。
-
下划线 (_)代表单个字符。
escape_character
对字符模式中的通配符进行转义的字符表达式。
说明LIKE运算符主要用于日志的精准查询。更多信息,请参见如何精准查询日志。
-
-
返回值类型
boolean类型。
-
示例
SQL
-
示例1:查询request_uri字段值是以file-8或file-6结尾的日志。
-
字段样例
request_uri:/request/path-2/file-6 -
查询和分析语句
*|SELECT * WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6' -
查询和分析结果:执行该查询语句后,返回
request_uri以file-8或file-6结尾的日志记录,每条记录包含remote_addr、remote_user、request_length、request_method、request_time、request_uri、scheme、server_protocol、slbid、status、time_local等字段。
-
-
示例2:判断request_uri字段值是否以file-6结尾。
-
字段样例
request_uri:/request/path-2/file-6 -
查询和分析语句
* | SELECT request_uri LIKE '%file-6' -
查询和分析结果返回
_col0列,值为true,表示request_uri的值匹配%file-6模式。
-
SPL
-
示例1:查询request_uri字段值是以file-8或file-6结尾的日志。
-
字段样例
-
request_uri:/request/path-2/file-6-
SPL语句
*|WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6'-
SPL结果
查询结果返回了所有 request_uri 字段值以 file-8 或 file-6 结尾的日志条目。
-
示例2:判断request_uri字段值是否以file-6结尾。
-
字段样例
-
request_uri:/request/path-2/file-6-
SPL语句
* | extend a = request_uri LIKE '%file-6'-
SPL结果
查询结果中新增字段
a的值为true,表明该条日志的 request_uri 字段值以 file-6 结尾。 -
SOME运算符
SOME运算符用于判断x是否满足任意一个条件。如果满足,则返回true。
-
语法
x relational operator SOME(subquery) -
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
比较运算符
<、>、<=、>=、=、<>、!=
重要SOME运算符必须紧跟在比较运算符(<、>、<=、>=、=、<>、!=)后面。
subquery
SQL子查询。
-
返回值类型
boolean类型。
-
示例
实例i-01相关的请求中,是否存在请求时长小于20s的请求。
-
字段样例
instance_id:i-01 request_time:16 -
查询和分析语句
* | SELECT 20 > SOME(SELECT request_time WHERE instance_id='i-01') -
查询和分析结果
-
GREATEST运算符
GREATEST运算符用于获取x、y中的最大值。
GREATEST运算符用于横向对比,max函数用于纵向对比。
-
语法
GREATEST(x, y...) -
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
y
参数值为任意可比较的数据类型。
-
返回值类型
double类型。
-
示例
对同一行中的request_time字段值和status字段值进行对比,获取其中的最大值。
-
字段样例
request_time:38 status:200 -
查询和分析语句
* | SELECT GREATEST(request_time,status) -
查询和分析结果返回
_col0列,值为200.0,即request_time(38)与status(200)中的较大值。
-
LEAST运算符
LEAST运算符用于获取x、y中的最小值。
LEAST运算符用于横向对比,min函数用于纵向对比。
-
语法
LEAST(x, y...) -
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
y
参数值为任意可比较的数据类型。
-
返回值类型
double类型。
-
示例
对同一行中的request_time字段值和status字段值进行对比,获取其中的最小值。
-
字段样例
request_time:77 status:200 -
查询和分析语句
* | SELECT LEAST(request_time,status) -
查询和分析结果
返回结果为77。
-
NULL运算符
NULL运算符用于判断x是否为null。
-
语法
-
IS NULL表示参数值为null时,返回true。
x IS NULL -
IS NOT NULL表示参数值不为null时,返回true。
x IS NOT NULL
-
-
参数说明
参数
说明
x
参数值为任意可比较的数据类型。
-
返回值类型
boolean类型。
-
示例
-
示例1:判断status字段值是否为null。
-
查询和分析语句
* | select status IS NULL -
查询和分析结果:查询结果返回
_col0列,两行值均为false,表示status字段不为 NULL。
-
-
示例2:统计status字段值不为空的日志条数。
-
查询和分析语句
* | SELECT count(*) AS count FROM log WHERE status IS NOT NULL -
查询和分析结果返回 count 值为
1340,表示日志中status不为 NULL 的日志条数。
-
-