比较运算符

比较运算符用于判断参数的大小关系,适用于任意可比较的数据类型(double、bigint、varchar、timestampdate)。本文介绍比较运算符的基本语法以及示例。

比较运算符概览

日志服务支持如下比较运算符。

重要 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。

运算符

语法

说明

支持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。

ALL运算符

x relational operator ALL(subquery)

x满足所有条件时,返回true。

×

ANY运算符

x relational operator ANY(subquery)

x满足任意一个条件时,返回true。

×

BETWEEN运算符

x BETWEEN y AND z

x处在yz之间时,返回true。

DISTINCT运算符

x IS DISTINCT FROM y

x不等于y时,返回true。

×

x IS NOT DISTINCT FROM y

x等于y时,返回true。

×

LIKE运算符

x LIKE pattern [escape 'escape_character']

用于匹配字符串中指定的字符模式。字符串区分大小写。

SOME运算符

x relational operator SOME(subquery)

x满足任意一个条件时,返回true。

×

GREATEST运算符

GREATEST(x, y...)

查询xy中的最大值。

×

LEAST运算符

LEAST(x, y...)

查询xy中的最小值。

×

NULL运算符

x IS NULL

xnull时,返回true。

x IS NOT NULL

x不为null时,返回true。

基础运算符

基础运算符用于比较xy的大小关系。如果逻辑成立,则返回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))
      • 查询和分析结果current_date

    • 示例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_city

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')
    • 查询和分析结果all

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')
    • 查询和分析结果any

BETWEEN运算符

BETWEEN用于判断x是否处在yz之间。如果是,则返回true。yz之间的范围为闭区间。

  • 语法

    x BETWEEN y AND z
  • 参数说明

    参数

    说明

    x

    参数值为任意可比较的数据类型。

    y

    参数值为任意可比较的数据类型。

    z

    参数值为任意可比较的数据类型。

    重要
    • xyz的数据类型必须一致。

    • xyz中任意一个的值包含null,则返回结果为null。

  • 返回值类型

    boolean类型。

  • 示例

    • 示例1:判断status字段值是否在[200,299]范围内。

      • 查询和分析语句

        * | SELECT status BETWEEN 200 AND 299
      • 查询和分析结果BETWEEN

    • 示例2:计算status字段值不在[200,299]范围内的日志条数。

      • 查询和分析语句

        * | SELECT count(*) AS count FROM log WHERE status NOT BETWEEN 200 AND 299
      • 查询和分析结果between

DISTINCT运算符

DISTINCT运算符用于判断xy是否相同。

  • 语法

    • 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类型。

  • 示例

    0null进行对比。

    • 查询和分析语句

      * | select 0 IS DISTINCT FROM null
    • 查询和分析结果distinct

LIKE运算符

LIKE运算符用于匹配字符串中指定的字符模式。字符串区分大小写。

  • 语法

    x LIKE pattern [escape 'escape_character']
  • 参数说明

    参数

    说明

    x

    参数值为任意可比较的数据类型。

    pattern

    字符模式,包括字符串和通配符。通配符说明如下:

    • 百分号(%)代表任意个字符。

    • 下划线 (_)代表单个字符。

    escape_character

    对字符模式中的通配符进行转义的字符表达式。

    说明

    LIKE运算符主要用于日志的精准查询。更多信息,请参见如何精准查询日志

  • 返回值类型

    boolean类型。

  • 示例

    SQL

    • 示例1:查询request_uri字段值是以file-8file-6结尾的日志。

      • 字段样例

        request_uri:/request/path-2/file-6
      • 查询和分析语句

        *|SELECT * WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6'
      • 查询和分析结果OR

    • 示例2:判断request_uri字段值是否以file-6结尾。

      • 字段样例

        request_uri:/request/path-2/file-6
      • 查询和分析语句

        * | SELECT request_uri LIKE '%file-6'
      • 查询和分析结果like

    SPL

    • 示例1:查询request_uri字段值是以file-8file-6结尾的日志。

      • 字段样例

    request_uri:/request/path-2/file-6
    • SPL语句

    *|WHERE request_uri LIKE '%file-8' OR request_uri LIKE '%file-6'
    • SPL结果

    image.png

    • 示例2:判断request_uri字段值是否以file-6结尾。

      • 字段样例

    request_uri:/request/path-2/file-6
    • SPL语句

    * | extend a = request_uri LIKE '%file-6'
    • SPL结果

    image.png

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')
    • 查询和分析结果any

GREATEST运算符

GREATEST运算符用于获取xy中的最大值。

说明

GREATEST运算符用于横向对比,max函数用于纵向对比。

  • 语法

    GREATEST(x, y...)
  • 参数说明

    参数

    说明

    x

    参数值为任意可比较的数据类型。

    y

    参数值为任意可比较的数据类型。

  • 返回值类型

    double类型。

  • 示例

    对同一行中的request_time字段值和status字段值进行对比,获取其中的最大值。

    • 字段样例

      request_time:38
      status:200
    • 查询和分析语句

      * |  SELECT GREATEST(request_time,status)
    • 查询和分析结果greatest

LEAST运算符

LEAST运算符用于获取xy中的最小值。

说明

LEAST运算符用于横向对比,min函数用于纵向对比。

  • 语法

    LEAST(x, y...)
  • 参数说明

    参数

    说明

    x

    参数值为任意可比较的数据类型。

    y

    参数值为任意可比较的数据类型。

  • 返回值类型

    double类型。

  • 示例

    对同一行中的request_time字段值和status字段值进行对比,获取其中的最小值。

    • 字段样例

      request_time:77
      status:200
    • 查询和分析语句

      * |  SELECT LEAST(request_time,status)
    • 查询和分析结果least

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
      • 查询和分析结果is null

    • 示例2:统计status字段值不为空的日志条数。

      • 查询和分析语句

        * | SELECT count(*) AS count FROM log WHERE status IS NOT NULL
      • 查询和分析结果is not null