1.日期类函数
1.1 日期或时间日期生成函数
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
now() |
生成当前时间日期 |
now() |
2020-08-14 23:46:34 |
DateTime |
today() |
生成今天的日期 |
today() |
2020-08-14 |
Date |
yesterday() |
生成昨天的日期 |
yesterday() |
2020-08-13 |
Date |
1.2 时间或日期截取函数(to)-返回非日期
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
toYear() |
取日期或时间日期的年份 |
toYear(toDateTime('2020-08-14 11:12:13’)); toYear(toDate('2020-08-14’)); toYear(now()); |
2020; 2020; 2020; |
UInt16; UInt16; UInt16 |
toMonth() |
取日期或时间日期的月份 |
toMonth(toDateTime('2020-08-13 11:12:13’)); toMonth(toDate('2020-08-13')) |
8; 8; |
UInt8; UInt8 |
toDayOfMonth() |
取日期或时间日期的天(1-31) |
toDayOfMonth(now()) |
14 |
UInt8 |
toDayOfWeek() |
取日期或时间日期的星期 |
toDayOfWeek(now()); |
6 |
UInt8 |
toHour() |
取时间日期的小时 |
toHour(toDateTime('2020-08-13 11:12:13')) |
11 |
UInt8 |
toMinute() |
取时间日期的分钟 |
toMinute(toDateTime(‘2020-08-13 11:12:13’)) |
12 |
UInt8 |
toSecond() |
取时间日期的秒 |
toSecond(toDateTime(‘2020-08-13 11:12:13’)) |
13 |
UInt8 |
toMonday() |
取时间日期最近的周一(返回日期) |
toMonday(toDate('2020-08-13')); |
2020-08-10 |
Date |
toTime() |
将时间日期的日期固定到某一天,保留原始时间 |
toTime(toDateTime(‘2020-08-13 11:12:13’)) |
1970-01-02 11:12:13 |
DateTime('Asia/Chungking') |
1.3 时间或日期截取函数(toStartOf)—— 返回日期
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
toStartOfMonth() |
取日期或时间日期的月份的第一天,返回日期。 |
toStartOfMonth(toDateTime('2020-08-18 11:12:13')) |
2020-08-01 |
Date |
toStartOfQuarter() |
取日期或时间日期的季度的第一天,返回日期 |
toStartOfQuarter(toDateTime('2018-12-11 11:12:13')) |
2018-10-01 |
Date |
toStartOfYear() |
取日期或时间日期的年份的第一天,返回日期 |
toStartOfYear(toDateTime('2020-08-18 11:12:13')); toStartOfYear(toDate('2020-08-18')) |
2020-01-01; 2020-01-01 |
Date; Date |
toStartOfMinute() |
截取时间日期到分钟(之后归零),返回日期 |
toStartOfMinute(toDateTime('2020-08-18 11:12:13')) |
2020-08-18 11:12:00 |
DateTime('Asia/Chungking') |
toStartOfFiveMinute() |
截取时间日期到最近的5的倍数分钟(之后归零),返回日期 |
toStartOfFiveMinute(toDateTime('2020-08-18 11:12:13')) |
2020-08-18 11:10:00 |
DateTime('Asia/Chungking') |
toStartOfFifteenMinutes |
截取时间日期到最近的15的倍数分钟(之后归零),返回日期 |
toStartOfFifteenMinutes(toDateTime('2020-08-18 11:12:13')) |
2020-08-18 11:00:00 |
DateTime('Asia/Chungking') |
toStartOfHour() |
截取时间日期到小时(之后归零),返回日期 |
toStartOfHour(toDateTime('2020-08-18 11:12:13') |
2020-08-18 11:00:00 |
DateTime('Asia/Chungking') |
toStartOfDay() |
截取时间日期到天(之后归零),返回日期 |
toStartOfDay(toDateTime('2020-08-18 11:12:13')) |
2020-08-18 00:00:00 |
DateTime('Asia/Chungking') |
timeSlot() |
将时间日期中,分钟大于等于30的归于30,分钟数小于30的归为00 |
timeSlot(toDateTime('2020-08-18 11:33:13’)) |
2020-08-18 11:30:00;
|
DateTime('Asia/Chungking') |
2.类型转化类函数
2.1 精度保留(非四舍五入)
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
toDecimal32('whdwjfe',8) |
将数值型或者含有非数字的字符串进行精度保留 |
toDecimal32(23.12291, 3) |
23.122 |
Decimal(9, 3) |
toDecimal64(‘whdwjfew’,8) |
将数值型或者含有非数字的字符串进行精度保留 |
toDecimal64(23.12291,3) |
23.122 |
Decimal(18, 3) |
toDecimal128(‘whdwjfew’,8) |
将数值型或者含有非数字的字符串进行精度保留 |
toDecimal128(23.12291, 3) |
23.122 |
Decimal(38, 3) |
2.2 字符串转化为整数(非整数的字符串返回0)
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
toUInt8OrZero() |
将无符号整数字符型转化为整数型,否则返回0 |
toUInt8OrZero(‘123’); toUInt8OrZero(‘123.12’) |
123; 0 |
UInt8; UInt8 |
toInt8OrZero() |
将整数字符型转化为整数型,否则返回0 |
toInt8OrZero('123’); toInt8OrZero('-123'); |
123; -123 |
Int8; Int8 |
toFloat32OrZero() |
将数值字符串型转化为数值型,注意:从toFloat32OrZero开始,丢32的没有对应的函数 |
toFloat32OrZero('-123’);
|
123;
|
Float32;
|
2.3 日期与时间日期转化
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
toDate() |
将字符型日期转化为日期型 |
toDate('2020-08-18') |
2020-08-18 |
Date |
toDateTime() |
将字符型时间日期转化为时间日期型 |
toDateTime('2020-08-18 10:10:00') |
2020-08-18 10:10:00 |
DateTime |
2.4 转化为字符型
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
toString() |
将数值型、字符型、日期等转化为字符型 |
toString(‘2020-08-18’); toString(‘123’) |
2020-08-18; 123 |
String |
2.5 查看数据类型
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
toTypeName() |
返回数据的类型 |
toTypeName(toString(‘123’)) |
123 |
String |
3.字符串操作
3.1 基本字符串操作
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
empty() |
判断字符串是空为1,否则为0 |
empty(‘’); empty('123a') |
1; 0; |
UInt8; UInt8 |
notEmpty() |
判断字符串是非空为1,否则为0 |
notEmpty(’’); notEmpty(‘123a’) |
0; 1 |
UInt8; UInt8 |
length() |
返回字符串的长度 |
length(’’); length(‘123a’) |
0; 4 |
UInt8; UInt8 |
lower() |
将字符串转为小写 |
lower(‘aBc’) |
abc |
String |
upper() |
将字符串转为大写 |
upper(‘aBc’) |
ABC |
String |
reverse() |
将字符串反转 |
reverse(‘abc’) |
cba |
String |
substring(s, offset, length) |
字符串截取 |
substring(‘123abcABC’, 2, 3) |
23a |
String |
appendTrailingCharIfAbsent(s, c) |
如果字符串s非空,则将s后追加一个字符c(s最后一个字符与c不同),否则不处理 |
appendTrailingCharIfAbsent('123abc', 'b’); appendTrailingCharIfAbsent('123abc', 'c') |
123abcb; 123abc |
String; String |
3.2 字符串查找
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
match(haystack,pattern) |
字符串正则匹配,返回0或1 |
match(‘avhsca’,'vh’) |
1 |
UInt8 |
extract(haystack,pattern) |
返回匹配到的第一个子串 |
extract('iioomAj12123124OOBJB', 'A') |
A |
String |
like(haystack,pattern) |
匹配到的数据返回1,否则返回0 |
like('avhsca','%vh%') |
1 |
UInt8 |
notLike(haystack, pattern) |
与like()函数相反 |
notLike(‘avhsca’,’%vh%’ |
0 |
UInt8 |
3.3 字符串替换
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
replaceOne(haystack,pattern,replacement) |
替换第一个匹配到的pattern |
replaceOne('asd123cbbj464sd', 'sd', '-') |
a-123cbbj464sd |
String |
replaceAll(haystack,pattern,replacement) |
替换所有匹配到的pattern |
replaceOne(‘asd123cbbj464sd’, ‘sd’, ‘-’) |
a-123cbbj464- |
String |
replaceRegexpOne(haystack, pattern, replacement) |
正则匹配替换第一个匹配到的pattern |
replaceRegexpOne(‘Hello, World!’, ‘o’, '- ') |
Hell- , World! |
String |
replaceRegexpAll(haystack,pattern,replacement) |
正则匹配替换所有匹配到的pattern |
replaceRegexpAll(‘Hello, World!’, ‘^’, 'here: ') |
hereHello, World! | String |
3.4 字符串分割
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
splitByChar(separator, s) |
以单个字符分割字符串 |
splitByChar('-','qw-asaf-asfqw-2312-asd') |
['qw','asaf','asfqw','2312','asd'] |
Array(String) |
splitByString(separator, s) |
以单个或多个字符分割字符串 |
splitByString('-a', 'qw-asaf-asfqw-2312-asd') |
['qw','saf','sfqw-2312','sd'] |
Array(String) |
|
|
|
|
|
3.5 字符串拼接
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
concat(s1,s2,…) |
将字符串拼接 |
concat('123', 'abc', 'ABC') |
123abcABC |
String |
4.算数函数
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
plus() |
求和 |
plus(12, 21) |
33 |
UInt16 |
minus() |
差值 |
minus(10, 5) |
5 |
UInt16 |
multiply() |
积 |
multiply(12, 2) |
24 |
UInt16 |
divide() |
平均值 |
divide(12, 4); divide(10, 3); divide(10, 0); divide(0, 0); intDivOrZero(10, 0) |
3; 3.3333333; -inf; nan; 0 |
UInt16; Float64; Float64; Float64; UInt8 |
modulo() |
求余数 |
modulo(10, 3); modulo(10.5, 3); |
1; 1 |
UInt8 |
negate() |
取反 |
negate(10) |
-10 |
UInt8 |
abs |
绝对值 |
abs(-10) |
10 |
UInt8 |
gcd |
最大公约数 |
gcd(12, 24) |
12 |
UInt8 |
lcm |
最小公倍数 |
lcm(12, 24) |
24 |
UInt8 |
5.比较函数
比较函数(始终返回0表示false 或 1表示true)
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
|
比较函数 |
SELECT 12 == 12, 12 != 10, 12 == 132, 12 != 12, 12 <> 12; |
1;1;0;0;0 |
UInt8 |
equals(),notEquals(),equals(),notEquals() |
比较函数 |
SELECT equals(12, 12), notEquals(12, 10), equals(12, 10), notEquals(12,123); |
1;1;0;0 |
UInt8 |
greater() |
前者是否大于后者 |
SELECT greater(12, 10), greater(10, 12), greater(12, 12); |
1;0;0 |
UInt8 |
greaterOrEquals() |
前者是否大于或等于后者 |
SELECT greaterOrEquals(12,10), greaterOrEquals(12,12); |
1;1 |
UInt8 |
less() |
前者是否小于后者 |
SELECT less(12, 21), less(12, 10), less(120, 120); |
1;0;0 |
UInt8 |
lessOrEquals() |
前世是否小于或等于或者 |
SELECT lessOrEquals(12, 120), lessOrEquals(12, 12); |
1;1 |
UInt8 |
6.逻辑函数
逻辑操作符(返回0表示false 或 1表示true)
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
==, != |
逻辑操作符 |
SELECT 12==12 or 12!=10; |
1 |
UInt8 |
not |
逻辑操作符 |
SELECT not 12, not 0; |
0;1 |
UInt8 |
or |
函数表示法:或 |
SELECT or(equals(12, 12), notEquals(12, 10)); |
1 |
UInt8 |
and |
函数表示法:且 |
SELECT and(equals(12, 12), notEquals(12, 10)); |
1 |
UInt8 |
7. 条件语句
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
if(cond,then,else) |
条件输出 |
if(1 > 2, ‘正确’, ‘错误’) |
错误 |
String |
multiIf(cond_1, then_1, cond_2, then_2…else) |
多条件输出 |
multiIf(1 > 2, ‘正确’, 2 < 0, ‘正确’, ‘错误’) |
错误 |
String |
8. 数学函数
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
e() |
返回e的值 |
e() |
2.718281828459045 |
Float64 |
pi() |
返回pi的值 |
pi() |
3.141592653589793 |
Float64 |
exp(x) |
返回e的x次方 |
exp(1) |
2.718281828459045 |
Float64 |
exp2(x) |
返回2的x次方 |
exp2(2) |
4 |
Float64 |
exp10(x) |
返回10的x次方 |
exp10(1) |
10 | Float64 |
log(x) |
返回log以e为底的对数值 |
log(e()) |
1 |
Float64 |
log2(x) |
返回log以2为底的对数值 |
log2(2) |
1 |
Float64 |
log10(x) |
返回log以10为底的对数值 |
log10(100) |
2 |
Float64 |
sqrt(x) |
对x开平方 |
sqrt(4) |
2 |
Float64 |
cbrt(x) |
对x开立方 |
cbrt(8) |
2 |
Float64 |
pow(x, y) |
返回x的y次方 |
pow(2, 3) |
8 |
Float64 |
9. 舍入函数
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
floor(x[, N]) |
向下取数 |
floor(123.883, 1); floor(123.883, -1) |
123.8; 120 |
Float64; Float64 |
ceil(x[, N]) |
向上取数 |
ceil(123.883, 1); ceil(123.883, -1) |
123.9; 130 |
Float64; Float64 |
round(x[, N]) |
四舍五入 |
round(123.883, 1); round(123.883, -1) |
123.9; 120 |
Float64; Float64 |
10. 表操作
10.1 表连接操作
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
INNER JOIN |
内连接 |
A表 INNER JOIN B表 |
A表与B表的公共部分 |
|
LEFT OUTER JOIN |
左外连接 |
A 表 LEFT OUTER JOIN B表 |
A表不在B表中的部分 |
|
RIGHT OUTER JOIN |
右外连接 |
A 表 RIGHT OUTER JOIN B表 |
B表不在A表中的部分 |
|
FULL OUTER JOIN |
全外连接 |
A 表 FULL OUTER JOIN B表 |
A与B表全部,没有为NULL |
|
10.2 LIMIT操作
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
LIMIT N |
查询N条数据,一般跟ORDER BY 连用 |
ORDER BY hit DESC LIMIT 10 |
按照hit列降排取前10 |
|
LIMIT N BY Clause |
按照Clause列查询N条数据,一般跟ORDER BY 连用 |
SELECT date, domain, count(1) AS hit from db.tb where…GROUP BY date, domain,ORDER BY hit DESCLIMIT 10 BY date |
取每天TOP10的域名 |
|
11.字典操作
函数 |
用途 |
举例 |
返回结果 |
返回类型 |
dictGetString() |
字典映射 |
SELECT dictGetString('ck_abc_dic', 'ck_value', tuple(_abc)) AS abc FROM DB.TABL WHERE date=today() LIMIT 10; |
|
|