操作符

    a[N] – 数组中的第N个元素; 对应函数 arrayElement(a, N)

    a.N – 元组中第N个元素; 对应函数 tupleElement(a, N)

    负号

    -a – 对应函数 negate(a)

    乘号、除号和取余

    a * b – 对应函数 multiply(a, b)

    a / b – 对应函数 divide(a, b)

    a % b – 对应函数 modulo(a, b)

    加号和减号

    a + b – 对应函数 plus(a, b)

    a - b – 对应函数 minus(a, b)

    关系运算符

    a = b – 对应函数 equals(a, b)

    a == b – 对应函数 equals(a, b)

    a != b – 对应函数 notEquals(a, b)

    a <> b – 对应函数 notEquals(a, b)

    a <= b – 对应函数 lessOrEquals(a, b)

    a >= b – 对应函数 greaterOrEquals(a, b)

    a < b – 对应函数 less(a, b)

    a > b – 对应函数 greater(a, b)

    a NOT LIKE s – 对应函数 notLike(a, b)

    a BETWEEN b AND c – 等价于 a >= b AND a <= c

    集合关系运算符

    详见此节 。

    a IN ... – 对应函数 in(a, b)

    a NOT IN ... – 对应函数 notIn(a, b)

    a GLOBAL IN ... – 对应函数 globalIn(a, b)

    a GLOBAL NOT IN ... – 对应函数 globalNotIn(a, b)

    – 对应函数 not(a)

    逻辑与

    a AND b – 对应函数and(a, b)

    逻辑或

    a OR b – 对应函数 or(a, b)

    条件运算符

    a ? b : c – 对应函数 if(a, b, c)

    注意:

    条件运算符会先计算表达式b和表达式c的值,再根据表达式a的真假,返回相应的值。如果表达式b和表达式c是 函数,则不管表达式a是真是假,每行都会被复制展开。

    使用日期和时间的操作员

    从给定日期中提取部件。 例如,您可以从给定日期检索一个月,或从时间检索一秒钟。

    part 参数指定要检索的日期部分。 以下值可用:

    • DAY — The day of the month. Possible values: 1–31.
    • MONTH — The number of a month. Possible values: 1–12.
    • YEAR — The year.
    • MINUTE — The minute. Possible values: 0–59.
    • HOUR — The hour. Possible values: 0–23.

    part 参数不区分大小写。

    例:

    1. SELECT EXTRACT(DAY FROM toDate('2017-06-15'));
    2. SELECT EXTRACT(MONTH FROM toDate('2017-06-15'));
    3. SELECT EXTRACT(YEAR FROM toDate('2017-06-15'));

    在下面的例子中,我们创建一个表,并在其中插入一个值 DateTime 类型。

    1. CREATE TABLE test.Orders
    2. (
    3. OrderId UInt64,
    4. OrderName String,
    5. OrderDate DateTime
    6. )
    7. ENGINE = Log;
    1. SELECT
    2. toYear(OrderDate) AS OrderYear,
    3. toMonth(OrderDate) AS OrderMonth,
    4. toDayOfMonth(OrderDate) AS OrderDay,
    5. toHour(OrderDate) AS OrderHour,
    6. toMinute(OrderDate) AS OrderMinute,
    7. toSecond(OrderDate) AS OrderSecond
    8. FROM test.Orders;
    1. ┌─OrderYear─┬─OrderMonth─┬─OrderDay─┬─OrderHour─┬─OrderMinute─┬─OrderSecond─┐
    2. 2008 10 11 13 23 44
    3. └───────────┴────────────┴──────────┴───────────┴─────────────┴─────────────┘

    你可以看到更多的例子 .

    创建一个 间隔-应在算术运算中使用的类型值 和 日期时间-类型值。

    示例:

    1. ┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
    2. 2019-10-23 11:16:28 2019-10-27 14:16:28

    另请参阅

    CASE条件表达式

    1. CASE [x]
    2. WHEN a THEN b
    3. [WHEN ... THEN ...]
    4. [ELSE c]
    5. END

    如果指定了 ,该表达式会转换为 transform(x, [a, ...], [b, ...], c) 函数。否则转换为 multiIf(a, b, ..., c)

    如果该表达式中没有 ELSE c 子句,则默认值就是 NULL

    transform 函数不支持 NULL

    s1 || s2 – 对应函数 concat(s1, s2)

    创建 Lambda 函数

    x -> expr – 对应函数 lambda(x, expr)

    接下来的这些操作符因为其本身是括号没有优先级:

    创建数组

    [x1, ...] – 对应函数 array(x1, ...)

    创建元组

    (x1, x2, ...) – 对应函数 tuple(x2, x2, ...)

    结合方式

    所有的同级操作符从左到右结合。例如, 1 + 2 + 3 会转换成 plus(plus(1, 2), 3)
    所以,有时他们会跟我们预期的不太一样。例如, SELECT 4 > 2 > 3 的结果是0。

    为了高效, andor 函数支持任意多参数,一连串的 ANDOR 运算符会转换成其对应的单个函数。

    判断是否为 NULL

    • 对于 类型的值, IS NULL 会返回:
      • 1 值为 NULL
      • 0 否则
    • 对于其他类型的值, IS NULL 总会返回 0
    • 对于 可为空 类型的值, IS NOT NULL 会返回:
      • 0 值为 NULL
      • 1 否则
    • 对于其他类型的值,IS NOT NULL 总会返回 1
    1. :) SELECT * FROM t_null WHERE y IS NOT NULL
    2. SELECT *
    3. FROM t_null
    4. WHERE isNotNull(y)
    5. ┌─x─┬─y─┐
    6. 2 3
    7. └───┴───┘