TOC
运算符
ClickHouse在查询解析阶段会根据优先权、优先级以及关联性转换操作符为相应的函数。
访问运算符
a[N]
– 访问数组元素。arrayElement(a, N)
函数。a.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 LIKE s
–like(a, b)
函数。a NOT LIKE s
–notLike(a, b)
函数。a ILIKE s
–ilike(a, b)
函数。a BETWEEN b AND c
– 与a >= b AND a <= c
相同。a NOT BETWEEN b AND c
– 与The same as a < b OR a > c
相同。
数据集处理运算符
参考IN operators
。
a IN ...
–in(a, b)
函数。a NOT IN ...
–notIn(a, b)
函数。a GLOBAL IN ...
–globalIn(a, b)
函数。a GLOBAL NOT IN ...
–globalNotIn(a, b)
函数。
日期和时间处理运算符
抽取
EXTRACT(part FROM date);
从给定的日期中提起部分。例如,可以从给定日期检索月份,或从时间检索秒。
part
参数指明了从日期中检索的部分。可用下面的值:
DAY
— 月中的那一天。可能的值:1–31。MONTH
— 月份。可能的值:1–12。YEAR
— 年。SECOND
— 秒。可能的值:0–59。MINUTE
— 分钟。可能的值:0–59。HOUR
— 小时。可能的值:0–23。
part
参数不区分大小写。
date
参数指定要处理的日期或时间。日期或日期时间类型都受支持。
例如:
SELECT EXTRACT(DAY FROM toDate('2017-06-15'));
SELECT EXTRACT(MONTH FROM toDate('2017-06-15'));
SELECT EXTRACT(YEAR FROM toDate('2017-06-15'));
下面的例子中我们创建一个表,然后插入一行包括DateTime
类型的值。
CREATE TABLE test.Orders
(
OrderId UInt64,
OrderName String,
OrderDate DateTime
)
ENGINE = Log;
INSERT INTO test.Orders VALUES (1, 'Jarlsberg Cheese', toDateTime('2008-10-11 13:23:44'));
SELECT
toYear(OrderDate) AS OrderYear,
toMonth(OrderDate) AS OrderMonth,
toDayOfMonth(OrderDate) AS OrderDay,
toHour(OrderDate) AS OrderHour,
toMinute(OrderDate) AS OrderMinute,
toSecond(OrderDate) AS OrderSecond
FROM test.Orders;
┌─OrderYear─┬─OrderMonth─┬─OrderDay─┬─OrderHour─┬─OrderMinute─┬─OrderSecond─┐
│ 2008 │ 10 │ 11 │ 13 │ 23 │ 44 │
└───────────┴────────────┴──────────┴───────────┴─────────────┴─────────────┘
可以在测试章节看到更多例子。
间隔
创建一个间隔类型值需要使用算术运算符以及Date
和DateTime
类型值。
间隔的类型:
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
还可以在设置INTERVAL
值时使用字符串文字。例如,INTERVAL 1 HOUR
与INTERVAL '1 hour'
或INTERVAL '1' hour
完全相同。
Warning:不同类型的间隔不能组合。不能使用类似于
INTERVAL 4 DAY 1 HOUR
的表达式。指定间隔的单位要小于或等于间隔的最小单位,例如,INTERVAL 25 HOUR
。可以使用连续操作符,如下面的示例所示。
例如:
SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR;
┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
│ 2020-11-03 22:09:50 │ 2020-11-08 01:09:50 │
└─────────────────────┴────────────────────────────────────────────────────────┘
SELECT now() AS current_date_time, current_date_time + INTERVAL '4 day' + INTERVAL '3 hour';
┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
│ 2020-11-03 22:12:10 │ 2020-11-08 01:12:10 │
└─────────────────────┴────────────────────────────────────────────────────────┘
SELECT now() AS current_date_time, current_date_time + INTERVAL '4' day + INTERVAL '3' hour;
┌───current_date_time─┬─plus(plus(now(), toIntervalDay('4')), toIntervalHour('3'))─┐
│ 2020-11-03 22:33:19 │ 2020-11-08 01:33:19 │
└─────────────────────┴────────────────────────────────────────────────────────────┘
参考
Interval
数据类型toInterval
类型转换函数
逻辑非运算符
NOT a
–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
是arrayJoin()
函数,那么无论“a”
条件如何,每一行都将被复制。
条件表达式
CASE [x]
WHEN a THEN b
[WHEN ... THEN ...]
[ELSE c]
END
如果指定x
,则会使用transform(x, [a, ...], [b, ...], c)
函数。否则multiIf(a, b, ..., c)
。
如果表达式中没有ELSE c
子句,则默认值为NULL
。
对于NULL
,transform
函数不起作用。
连接运算符
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。
为了提高效率,and
和or
函数接受任意数量的参数。相应的AND
和OR
操作符链被转换为这些函数的单个调用。
检查NULL
ClickHouse 支持 IS NULL
和IS NOT NULL
运算符。
IS NULL
- 对于
Nullable
类型的值,IS NULL
运算符返回:1
,如果值为NULL。- 其他
0
。
- 对于其他值,
IS NULL
运算符总是返回0
。
SELECT x+100 FROM t_null WHERE y IS NULL
┌─plus(x, 100)─┐
│ 101 │
└──────────────┘
IS NOT NULL
- 对于
Nullable
类型的值,IS NOT NULL
运算符返回:0
,如果值为NULL。- 其他
1
。
- 对于其他值,
IS NOT NULL
运算符总是返回1
。
SELECT * FROM t_null WHERE y IS NOT NULL
┌─x─┬─y─┐
│ 2 │ 3 │
└───┴───┘
「如果这篇文章对你有用,请支持一下哦」
如果这篇文章对你有用,请支持一下哦
使用微信扫描二维码完成支付