ClickHouse常用函数整理
1. 日期类函数
1.1 时间或日期截取函数(to)—— 返回非日期
函数 |
用途 |
举例 |
结果 |
toYear() |
取日期或时间日期的年份 |
toYear(toDateTime(‘2018-12-11 11:12:13’)) toYear(toDate(‘2018-12-11’)) |
返回 2018 返回 2018 |
toMonth() |
取日期或时间日期的月份 |
toMonth(toDateTime(‘2018-12-11 11:12:13’)) toMonth(toDate(‘2018-12-11’)) |
返回 12 返回 12 |
toDayOfMonth() |
取日期或时间日期的天(1-31) |
toMonth(toDayOfMonth(‘2018-12-11 11:12:13’)) toMonth(toDayOfMonth(‘2018-12-11’)) |
返回 11 返回 11 |
toDayOfWeek() |
取日期或时间日期的星期(星期一为1,星期日为7)。 |
toDayOfWeek(toDateTime(‘2018-12-11 11:12:13’)) toDayOfWeek(toDate(‘2018-12-11’)) |
返回 2 返回 2 |
toHour() |
取时间日期的小时 |
toHour(toDateTime(‘2018-12-11 11:12:13’)) |
返回 11 |
toMinute() |
取时间日期的分钟 |
toMinute(toDateTime(‘2018-12-11 11:12:13’)) |
返回 12 |
toSecond() |
取时间日期的秒 |
toSecond(toDateTime(‘2018-12-11 11:12:13’)) |
返回 13 |
toMonday() |
取时间日期最近的周一(返回日期) |
toMonday(toDate(‘2018-12-11’)) toMonday(toDateTime(‘2018-12-11 11:12:13’)) |
返回 2018-12-10 返回 2018-12-10 |
toTime() |
将时间日期的日期固定到某一天,保留原始时间 |
toTime(toDateTime(‘2018-12-11 11:12:13’)) |
返回 1970-01-02 11:12:13 |
1.2 时间或日期截取函数(toStartOf)—— 返回日期
函数 |
用途 |
举例 |
结果 |
toStartOfMonth() |
取日期或时间日期的月份的第一天,返回日期 |
toStartOfMonth(toDateTime(‘2018-12-11 11:12:13’)) toStartOfMonth(toDate(‘2018-12-11’)) |
返回 2018-12-01 返回 2018-12-01 |
toStartOfQuarter() |
取日期或时间日期的季度的第一天,返回日期 |
toStartOfQuarter(toDateTime(‘2018-12-11 11:12:13’)) toStartOfQuarter(toDate(‘2018-12-11’)) |
返回 2018-10-01 返回 2018-10-01 |
toStartOfYear() |
取日期或时间日期的年份的第一天,返回日期 |
toStartOfYear(toDateTime(‘2018-12-11 11:12:13’))toStartOfYear(toDate(‘2018-12-11’)) |
返回 2018-01-01 返回 2018-01-01 |
toStartOfMinute() |
截取时间日期到分钟(之后归零),返回日期 |
toStartOfMinute(toDateTime(‘2018-12-11 11:12:13’)) |
返回 2018-12-11 11:12:00 |
toStartOfFiveMinute() |
截取时间日期到最近的5的倍数分钟(之后归零),返回日期 |
toStartOfFiveMinute(toDateTime(‘2018-12-11 11:12:13’)) |
返回 2018-12-11 11:10:00 |
toStartOfFifteenMinutes() |
截取时间日期到最近的15的倍数分钟(之后归零),返回日期 |
toStartOfFifteenMinutes(toDateTime(‘2018-12-11 11:12:13’)) |
返回 2018-12-11 11:00:00 |
toStartOfHour() |
截取时间日期到小时(之后归零),返回日期 |
toStartOfHour(toDateTime(‘2018-12-11 11:12:13’)) |
返回 2018-12-11 11:00:00 |
toStartOfDay() |
截取时间日期到天(之后归零),返回日期 |
toStartOfDay(toDateTime(‘2018-12-11 11:12:13’)) |
返回 2018-12-11 00:00:00 |
timeSlot() |
将时间日期中,分钟大于等于30的归于30,分钟数小于30的归为00 |
timeSlot(toDateTime(‘2018-12-11 11:33:13’)) timeSlot(toDateTime(‘2018-12-11 11:33:13’)) |
返回 2018-12-11 11:00:00 返回 2018-12-11 11:30:00 |
1.3 日期或时间日期生成函数
函数 |
用途 |
举例 |
结果 |
now() |
生成当前时间日期 |
now() |
返回 2018-12-13 10:10:12 |
today() |
生成今天的日期 |
today() |
返回 2018-12-13 |
yesterday() |
生成昨天的日期 |
yesterday() |
返回 2018-12-12 |
Function formats a Time according given Format string. N.B.: Format is a constant expression, e.g. you can not have multiple formats for single result column.
Supported modifiers for Format: ("Example" column shows formatting result for time 2018-01-02 22:33:44)
Modifier |
Description |
Example |
%C |
year divided by 100 and truncated to integer (00-99) |
20 |
%d |
day of the month, zero-padded (01-31) |
2 |
%D |
Short MM/DD/YY date, equivalent to %m/%d/%y |
01/02/2018 |
%e |
day of the month, space-padded ( 1-31) |
2 |
%F |
short YYYY-MM-DD date, equivalent to %Y-%m-%d |
2018/1/2 |
%H |
hour in 24h format (00-23) |
22 |
%I |
hour in 12h format (01-12) |
10 |
%j |
day of the year (001-366) |
2 |
%m |
month as a decimal number (01-12) |
1 |
%M |
minute (00-59) |
33 |
%n |
new-line character ('\n') |
|
%p |
AM or PM designation |
PM |
%R |
24-hour HH:MM time, equivalent to %H:%M |
22:33 |
%S |
second (00-59) |
44 |
%t |
horizontal-tab character ('\t') |
|
%T |
ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S |
22:33:44 |
%u |
ISO 8601 weekday as number with Monday as 1 (1-7) |
2 |
%V |
ISO 8601 week number (01-53) |
1 |
%w |
weekday as a decimal number with Sunday as 0 (0-6) |
2 |
%y |
Year, last two digits (00-99) |
18 |
%Y |
Year |
2018 |
%% |
a % sign |
% |
2. 类型转化类函数
2.1 精度保留(非四舍五入)
函数 |
用途 |
举例 |
结果 |
toDecimal32(‘whdwjfew’,8) |
将数值型或者含有非数字的字符串进行精度保留 |
toDecimal32(23.12291, 3)toDecimal32(’_23.12291’, 3) |
返回 23.122 返回 0.000 |
toDecimal64(‘whdwjfew’,8) |
将数值型或者含有非数字的字符串进行精度保留 |
toDecimal64(23.12291, 3) toDecimal64(’_23.12291’, 3) |
返回 23.122 返回 0.000 |
toDecimal128(‘whdwjfew’,8) |
将数值型或者含有非数字的字符串进行精度保留 |
toDecimal128(23.12291, 3) toDecimal128(’_23.12291’, 3) |
返回 23.122 返回 0.000 |
2.2 字符串转化为整数(非整数的字符串返回0)
函数 |
用途 |
举例 |
结果 |
toUInt8OrZero() |
将无符号整数字符型转化为整数型,否则返回0 |
toUInt8OrZero(‘123’) toUInt8OrZero(‘123.12’) |
返回 123 返回 0 |
toInt8OrZero() |
将整数字符型转化为整数型,否则返回0 |
toInt8OrZero(‘123’) toInt8OrZero(’-123’) |
返回 123 返回 -123 |
toFloat32OrZero() |
将数值字符串型转化为数值型,注意:从toFloat32OrZero开始,丢32的没有对应的函数 |
toFloat32OrZero(‘-123’)toFloat32OrZero(‘123.123’) |
返回 -123 返回 123.123 |
2.3 日期与时间日期转化
函数 |
用途 |
举例 |
结果 |
toDate() |
将字符型日期转化为日期型 |
toDate(‘2018-12-24’) |
返回 2018-12-24 |
toDateTime() |
将字符型时间日期转化为时间日期型 |
toDateTime(‘2018-12-24 10:10:00’) |
返回 2018-12-24 10:10:00 |
toUnixTimestamp() |
将DateTime转换成Unix时间戳 |
toUnixTimestamp(now()) |
返回 1589618717 |
2.4 转化为字符型
函数 |
用途 |
举例 |
结果 |
toString() |
将数值型、字符型、日期等转化为字符型 |
toString(‘2018-12-24’) toString(‘123’) |
返回 2018-12-24 返回 123 |
2.5 查看数据类型
函数 |
用途 |
举例 |
结果 |
toTypeName() |
返回数据的类型 |
toTypeName(toString(‘123’)) toTypeName(toDate(‘2018-12-24’)) |
返回 String 返回 Date |
3. 字符串操作
3.1 基本字符串操作
函数 |
用途 |
举例 |
结果 |
empty() |
判断字符串是空为1,否则为0 |
empty(’’)empty(‘123a’) |
返回 1返回 0 |
notEmpty() |
判断字符串是非空为1,否则为0 |
notEmpty(’’)notEmpty(‘123a’) |
返回 0返回 1 |
length() |
返回字符串的长度 |
length(’’)length(‘123a’) |
返回 0返回 4 |
lower() |
将字符串转为小写 |
lower(‘aBc’) |
返回 abc |
upper() |
将字符串转为大写 |
upper(‘aBc’) |
返回 ABC |
reverse() |
将字符串反转 |
reverse(‘abc’) |
返回 cba |
substring(s, offset, length) |
字符串截取 |
substring(‘123abcABC’, 2, 3) |
返回 23a |
appendTrailingCharIfAbsent(s, c) |
如果字符串s非空,则将s后追加一个字符c(s最后一个字符与c不同),否则不处理 |
appendTrailingCharIfAbsent(‘123abc’, ‘b’)appendTrailingCharIfAbsent(‘123abc’, ‘c’) |
返回 123abcb返回 123abc |
3.2 字符串查找
函数 |
用途 |
举例 |
结果 |
match(haystack,pattern) |
字符串正则匹配,返回0或1 |
match(‘avhsca’,'vh’) |
返回 1 |
extract(haystack,pattern) |
返回匹配到的第一个子串 |
extract(‘iioomAj12123124OOBJB’, ‘\d+’) |
返回 12123124 |
extractAll(haystack,pattern) |
返回匹配到的所有子串,输出列表 |
extractAll(‘iioomAj12123124OOBJ123B’, ‘\d+’) |
返回 [12123124,123] |
like(haystack,pattern) |
匹配到的数据返回1,否则返回0 |
like(‘avhsca’,’%vh%’)like(‘avhsca’,’%vabjh%’) |
返回 1返回 0 |
notLike(haystack, pattern) |
与like()函数相反 |
notLike(‘avhsca’,’%vh%’)notLike(‘avhsca’,’%vabjh%’) |
返回 0返回 1 |
3.3 字符串替换
函数 |
用途 |
举例 |
结果 |
replaceOne(haystack,pattern,replacement) |
替换第一个匹配到的pattern |
replaceOne(‘asd123cbbj464sd’, ‘sd’, ‘-’) |
返回 a-123cbbj464sd |
replaceAll(haystack,pattern,replacement) |
替换所有匹配到的pattern |
replaceOne(‘asd123cbbj464sd’, ‘sd’, ‘-’) |
返回 a-123cbbj464- |
replaceRegexpOne(haystack, pattern, replacement) |
正则匹配替换第一个匹配到的pattern |
replaceRegexpOne(‘Hello, World!’, ‘o’, '- ') |
返回 Hell- , World! |
replaceRegexpAll(haystack,pattern,replacement) |
正则匹配替换所有匹配到的pattern |
replaceRegexpAll(‘Hello, World!’, ‘^’, 'here: ')replaceRegexpAll(‘Hello, World!’, ‘o’, '-- ') |
返回 here: Hello, World! 返回 Hell-- , W-- rld! |
3.4 字符串分割
函数 |
用途 |
举例 |
结果 |
splitByChar(separator, s) |
以单个字符分割字符串 |
splitByChar(’-’, ‘qw-asaf-asfqw-2312-asd’) |
返回 [‘qw’,‘asaf’,‘asfqw’,‘2312’,‘asd’] |
splitByString(separator, s) |
以单个或多个字符分割字符串 |
splitByString(’-’, ‘qw-asaf-asfqw-2312-asd’)splitByString(’-a’, ‘qw-asaf-asfqw-2312-asd’) |
返回 [‘qw’,‘asaf’,‘asfqw’,‘2312’,‘asd’]返回 [‘qw’,‘saf’,‘sfqw-2312’,‘sd’] |
3.5 字符串拼接
函数 |
用途 |
举例 |
结果 |
concat(s1,s2,…) |
将字符串拼接 |
concat(‘123’, ‘abc’, ‘ABC’) |
返回 123abcABC |
4. 条件语句
函数 |
用途 |
举例 |
结果 |
if(cond,then,else) |
条件输出 |
if(1 > 2, ‘正确’, ‘错误’) |
返回 错误 |
multiIf(cond_1, then_1, cond_2, then_2…else) |
多条件输出 |
multiIf(1 > 2, ‘正确’, 2 < 0, ‘正确’, ‘错误’) |
返回 错误 |
5.数学函数
函数 |
用途 |
举例 |
结果 |
e() |
返回e的值 |
e() |
返回 2.718281828459045 |
pi() |
返回pi的值 |
pi() |
返回 3.141592653589793 |
exp(x) |
返回e的x次方 |
exp(1) |
返回 2.718281828459045 |
exp2(x) |
返回2的x次方 |
exp2(2) |
返回 4 |
exp10(x) |
返回10的x次方 |
exp10(1) |
返回 10 |
log(x) |
返回log以e为底的对数值 |
log(e()) |
返回 1 |
log2(x) |
返回log以2为底的对数值 |
log2(2) |
返回 1 |
log10(x) |
返回log以10为底的对数值 |
log10(100) |
返回 2 |
sqrt(x) |
对x开平方 |
sqrt(4) |
返回 2 |
cbrt(x) |
对x开立方 |
cbrt(8) |
返回 2 |
pow(x, y) |
返回x的y次方 |
pow(2, 3) |
返回 8 |
6. 舍入函数
函数 |
用途 |
举例 |
结果 |
floor(x[, N]) |
向下取数 |
floor(123.883, 1)floor(123.883, -1) |
返回 123.8返回 120 |
ceil(x[, N]) |
向上取数 |
ceil(123.883, 1)ceil(123.883, -1) |
返回 123.9返回 130 |
round(x[, N]) |
四舍五入 |
round(123.883, 1)round(123.883, -1) |
返回 123.9返回 120 |
7. URL操作函数
8. IP操作函数
函数 |
用途 |
举例 |
IPv4StringToNum(s) |
将IPV4转为数值,非IPV4的转化为0 |
IPv4StringToNum(‘23.217.198.69’) IPv4StringToNum(‘adwh.124.qwfqw’) |
IPv4NumToString(num) |
将数值转为IPV4 |
IPv4NumToString(400148037) |
9. 表操作
9.1 表连接操作
函数 |
用途 |
举例 |
结果 |
LIMITN |
查询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 DESC LIMIT 10 BY date |
取每天TOP10的域名 |
9.2 字典操作
函数 |
用途 |
举例 |
结果 |
dictGetString() |
字典映射 |
dictGetString(‘ck_abc_dic’, ‘ck_value’, tuple(_abc)) |
|
10. 参考资料
[ClickHouse函数整理(详细)](