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 %
附相关文档:parseDateTimeBestEffort 将数字类型参数解析为Date或DateTime类型。 与toDate和toDateTime不同,parseDateTimeBestEffort可以进行更复杂的日期格式。 有关详细信息,请参阅链接:复杂日期格式。
parseDateTimeBestEffortOrNull 与parseDateTimeBestEffort相同,但它遇到无法处理的日期格式时返回null。
parseDateTimeBestEffortOrZero 与parseDateTimeBestEffort相同,但它遇到无法处理的日期格式时返回零Date或零DateTime。
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函数整理(详细)_思过留痕-CSDN博客_clickhouse 函数
ClickHouse常用函数整理 - 莫测Jack - 博客园