SQL语法
所有文档

          百度日志服务 BLS

          SQL语法

          目录

          1.语法支持
          2.运算符
          3.内置函数
          3.1类型转换函数
          3.2聚合函数
          3.3字符串函数
          3.4数学函数
          3.5日期时间函数
          3.6条件函数
          4.附录
          4.1 日期格式
          4.2 关键字

          语法支持

          BLS 支持基础的 SELECT 查询,具体查询语法是

          SELECT
              select_expr [, select_expr] ...
              [FROM subquery [AS] table_id]
              [WHERE where_condition]
              [GROUP BY {col_name | expr}, ... ]
              [HAVING where_condition]
              [ORDER BY {col_name | expr} [ASC | DESC], ...]
              [LIMIT [offset,] row_count]

          其中,where_condition 是一个执行结果为布尔值的条件表达式。不需要子查询的时候不写 FROM 子句。

          字段名大小写敏感,且尽量避免使用关键字,如果使用了关键字要加反引号,例如:`action`。

          运算符

          一元前缀运算

          操作符 示例 描述
          +/- -A 改变参数的符号

          二元运算

          操作符 示例 描述
          + A + B 加法运算
          - A - B 减法运算
          * A * B 乘法运算
          / A / B 除法运算
          % A % B 模数运算,结果是 A 除以 B 的余数

          关系运算

          操作符 示例 描述
          = A = B 如果 A 等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
          != A != B 如果 A 不等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
          > A > B 如果 A 大于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
          >= A >= B 如果 A 大于等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
          < A < B 如果 A 小于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
          <= A <= B 如果 A 小于等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
          [NOT] LIKE A LIKE pattern 如果 A [不]符合 pattern,返回 TRUE,否则返回 FALSE
          IS [NOT] NULL A IS NULL 如果 A [不]为 NULL,返回 TRUE,否则返回 FALSE
          IS [NOT] TRUE/FALSE A IS TRUE 如果 A [不]为 TRUE/FALSE,返回 TRUE,否则返回 FALSE

          逻辑运算

          操作符 示例 描述
          [NOT] IN A IN (val1, val2, ...) 如果 A [不]等于 任何一个参数值,返回 TRUE,否则返回 FALSE
          AND A AND B 如果 A 和 B 都为 TRUE,返回 TRUE,否则返回 FALSE。如果 A 或 B 不是布尔类型,返回 NULL
          OR A OR B 如果 A 或 B 为 TRUE,返回 TRUE,否则返回 FALSE。如果 A 或 B 不是布尔类型,返回 NULL
          NOT NOT A 如果 A 为 FALSE,返回 TRUE,否则返回 FALSE。如果 A 不是布尔类型,返回 NULL

          内置函数

          类型转换函数

          函数签名 返回值 描述 示例
          cast(expr as <type>) <type> 将 expr 的值转换成 <type> 类型,<type> 支持 BIGINT, DECIMAL, VARCHAR, TIMESTAMP >select cast("123" as BIGINT)
          123

          聚合函数

          函数签名 返回值 描述 示例
          count(*),count(expr),count(DISTINCT expr) Int 计算符合条件的结果行数 >select count(*)
          10
          sum(col) T 计算元素的和 >select sum(num)
          983
          avg(col) Double 计算元素的平均值 >select avg(num)
          73.14
          max(col) T 计算元素的最大值 >select max(num)
          99
          min(col) T 计算元素的最小值 >select min(num)
          62
          first(col) T 计算元素的首个值 >select first(num)
          87
          last(col) T 计算元素的最后一个值 >select min(num)
          95

          字符串函数

          函数签名 返回值 描述 示例
          reverse(String str) String 返回顺序反转的字符串 >select reverse("hello")
          olleh
          lower(String str) String 返回小写格式字符串 >select lower("fOoBaR")
          foobar
          upper(String str) String 返回大写格式字符串 >select upper("fOoBaR")
          FOOBAR
          capitalize(String str) String 返回所有单词首字母大写格式的字符串 >select upper("fOoBaR")
          FOoBaR
          substring(String str, Int start [, Int len]) String 返回原字符串从 start 位置开始,长度为 len 的子串。start 从 1 开始,支持负数,此时从结尾开始反向计算位置。len 参数不传表示截取到字符串结尾 >select substr("fOoBaR", 2, 4)
          OoBa
          >select substr("fOoBaR", -3, 2)
          Ba
          substr(String str, Int start [, Int len]) String substring() 的别名
          replace(String str, String OLD, String NEW) String 返回 OLD 子串被替换为 NEW 子串的字符串 str >select replace("abcdef", "abc", "cba")
          cbadef
          length(String str) Int 返回字符串的长度 >replace("abcdef", "abc", "cba")
          cbadef
          locate(String substr, String str) Int 返回字符串 str 中 substr 的首个出现位置,如果没有则返回 0 >select locate(".", "3.14")
          2
          position(String substr, String str) Int locate() 的别名
          concat(String A, String B...) String 返回所有参数按照传入顺序拼接成的字符串 >select concat("foo", "bar")
          foobar

          数学函数

          函数签名 返回值 描述 示例
          abs(Double a), abs(Int a) Double/Int 计算绝对值 >select abs(-2)
          2
          sqrt(Double a) Double 计算平方根 >select sqrt(100)
          10
          greatest(T v1, T v2, ...) T 计算参数中的最大值,如果任何一个参数是 Null,则返回 Null >select greatest(1, 3.14, -5)
          3.14
          least(T v1, T v2, ...) T 计算参数中的最小值,如果任何一个参数是 Null,则返回 Null >select least(1, 3.14, -5)
          -5
          rand() Double 返回一个0到1之间的随机数,数据集的每一行得到的随机数不同 >select rand()
          0.3
          ceil(Double a) Int 返回大于等于 a 且最接近 a 的整数 >select ceil(3.14)
          4
          floor(Double a) Int 返回小于等于 a 且最接近 a 的整数 >select floor(3.14)
          3
          log(Double a) Double 计算以2为底的对数值 >select log(32)
          5
          ln(Double a) Double 计算自然对数 >select ln(100)
          4.61512051684126
          pow(Double a, Double p) Double 计算 a 的 p 次方 >select pow(2, 5)
          32

          日期时间函数

          函数签名 返回值 描述 示例
          now() DateTime 返回当前本地时间 >select now()
          2020-01-16T08:30:50Z
          current_timestamp() DateTime now() 的别名
          unix_timestamp([String/DateTime date[, String format]]) Int 将日期时间字符串或 DateTime 类型数值按照 format 格式转换成 Unix timestamp。默认支持 ISO8601 格式,根据字符串中的时区解析。如果根据 format 格式解析,将使用本地时区。 >select unix_timestamp("2019-11-11T11:11:11Z")
          1573470671
          >select unix_timestamp("2019-11-11 11:11:11", "%Y-%m-%d %H:%i:%s")
          1573441871
          from_unixtime(Int unixtime[, String format]) String 将 unixtime(从 1970-01-01 00:00:00 UTC 到现在到秒数)转换成表示本地时间的字符串,默认格式为"1970-01-01 00:00:00",可以通过 format 指定字符串格式。支持的 date_format 请参考附录 >select from_unixtime(0)
          1970-01-01 08:00:00
          >select from_unixtime(unix_timestamp("2019-11-11T11:11:11+08:00"))
          2019-11-11 11:11:11
          str_to_date(String str, String format) DateTime 根据 format 解析日期时间字符串 str >select str_to_date("2019-11-11 11:11:11", "%Y-%m-%d %H:%i:%s")
          2019-11-11T03:11:11Z
          year(String/DateTime date) Int 返回日期 date 的年份 >select year("2019-11-07T09:09:16+08:00")
          2019
          month(String/DateTime date) Int 返回日期 date 的月份 >select year("2019-11-07T09:09:16+08:00")
          11
          day(String/DateTime date) Int dayofmonth() 的别名
          weekday(String/DateTime date) Int 返回日期 date 在一星期中的位置 (0 = 星期一, 1 = 星期二, ... 6 = 星期日) >select weekday("2019-11-07T09:09:16+08:00")
          3
          dayofyear(String/DateTime date) Int 返回日期 date 在一年中的位置,可选值从 1 到 366 >select dayofyear("2019-11-07T09:09:16+08:00")
          311
          dayofmonth(String/DateTime date) Int 返回日期 date 在一个月中的位置 >select dayofmonth("2019-11-07T09:09:16+08:00")
          7
          dayofweek(String/DateTime date) Int 返回日期 date 在一星期中的位置 (1 = 星期日, 2 = 星期一, ... 7 = 星期六) >select dayofweek("2019-11-07T09:09:16+08:00")
          5

          条件函数

          函数签名 返回值 描述 示例
          if(Boolean testCondition, T valueTrue, T valueFalseOrNull) T 如果测试条件为 true,返回 ValueTrue,否则返回 ValueFalseOrNull >select if(2>1, 1, 0)
          1
          nullif(T a, T b) T 如果 a = b,返回 Null,否则返回 a >select nullif(1, 1)
          null
          coalesce(T v1, T v2, ...) T 返回第一个不是 Null 的值,如果参数都是 Null,返回 Null >select coalesce(null, 0, false, 1)
          0
          CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END T 如果 a = b,返回 c;如果 a = d,返回 e;否则返回 f >select case substring("abc", 1, 1) when "a" then "a" when "b" then "b" else "c" end
          a
          CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END T 如果 a = true,返回 b;如果 c = true,返回 d;否则返回 e >select case when substring("abc", 1, 1) = "a" then "a" when 2 > 1 then "b" else "c" end
          a

          附录

          日期格式

          时间函数支持的 date_format

          占位符 描述
          %a Abbreviated weekday name (Sun..Sat)
          %b Abbreviated month name (Jan..Dec)
          %c Month, numeric (0..12)
          %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
          %d Day of the month, numeric (00..31)
          %e Day of the month, numeric (0..31)
          %f Microseconds (000000..999999)
          %H Hour (00..23)
          %h Hour (01..12)
          %I Hour (01..12)
          %i Minutes, numeric (00..59)
          %j Day of year (001..366)
          %k Hour (0..23)
          %l Hour (1..12)
          %M Month name (January..December)
          %m Month, numeric (00..12)
          %p AM or PM
          %r Time, 12-hour (hh:mm:ss followed by AM or PM)
          %S Seconds (00..59)
          %s Seconds (00..59)
          %T Time, 24-hour (hh:mm:ss)
          %W Weekday name (Sunday..Saturday)
          %w Day of the week (0=Sunday..6=Saturday)
          %Y Year, numeric, four digits
          %y Year, numeric (two digits)
          %% A literal % character

          关键字

          #

          _binary
          _utf8mb4

          A - F

          accessible action add against all alter analyze and as asc asensitive auto_increment before begin between bigint binary bit blob bool boolean both by call cascade case cast change char character charset check collate collation column columns comment commit committed condition constraint continue convert create cross current_date current_time current_timestamp current_user cursor database databases date datetime day_hour day_microsecond day_minute day_second dec decimal declare default delayed delete desc describe descriptor deterministic distinct distinctrow div double drop duplicate each else elseif enclosed end engines enum escape escaped exists exit expansion explain false fetch fields float float4 float8 flush for force foreign from full fulltext

          G - N

          generated geometry geometrycollection get global grant group group_concat having high_priority hour_microsecond hour_minute hour_second if ignore in index infile inner inout insensitive insert int int1 int2 int3 int4 int8 integer interval into io_after_gtids is isolation iterate join json key key_block_size keys kill language last_insert_id leading leave left less level like limit linear lines linestring load localtime localtimestamp lock long longblob longtext loop low_priority master_bind match maxvalue mediumblob mediumint mediumtext middleint minute_microsecond minute_second mod mode modifies multilinestring multipoint multipolygon names natural nchar next no no_write_to_binlog not null numeric

          O - S

          off offset on only optimize optimizer_costs option optionally or order out outer outfile partition plugins point polygon precision primary procedure processlist query read read_write reads real references regexp release rename reorganize repair repeat repeatable replace require resignal restrict return revoke right rlike rollback schema schemas second_microsecond select sensitive separator serializable session set share show signal signed smallint spatial specific sql sql_big_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting status stored straight_join stream string substr substring

          T - Z

          table tables terminated text than then time timestamp timestampadd timestampdiff tinyblob tinyint tinytext to trailing transaction trigger true truncate uncommitted undo union unique unlock unsigned update usage use using utc_date utc_time utc_timestamp values varbinary varchar varcharacter variables varying view vindex vindexes virtual vitess_keyspaces vitess_shards vitess_tablets vitess_target vschema vschema_tables warnings when where while with write xor year year_month zerofill

          上一篇
          日志查询
          下一篇
          检索语法