# SPL文档(常用函数)

## 日期类函数

### 时间或日期截取函数(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

toDateTime()| 将时间戳转换为时间类型 |toDateTime(at_timestamp/1000)|

### 时间或日期截取函数(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

### 日期或时间日期生成函数

函数 | 用途 | 举例 | 结果

---|---|---|---

now()| 生成当前时间日期 |now()|2018-12-13 10:10:12

today()| 生成今天的日期 |today()|2018-12-13

yesterday()| 生成昨天的日期 |yesterday()|2018-12-12

## 类型转化类函数

### 精度保留(非四舍五入)

函数 | 用途 | 举例 | 结果

---|---|---|---

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

###  字符串转化为整数

函数 | 用途 | 举例 | 结果

---|---|---|---

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

### 日期与时间日期转化

###  字符串转化为整数

函数 | 用途 | 举例 | 结果

---|---|---|---

toDate()| 将字符型日期转化为日期型 |toDate('2018-12-24')|2018-12-24

toDateTime()| 将字符型时间日期转化为时间日期型 |toDateTime('2018-12-24 10:10:00')|2018-12-24 10:10:00

### 转化为字符型

函数 | 用途 | 举例 | 结果

---|---|---|---

toString()| 将数值型、字符型、日期等转化为字符型 |toString('2018-12-24')

toString('123')|2018-12-24

123

### 查看数据类型

函数 | 用途 | 举例 | 结果

---|---|---|---

toTypeName()| 返回数据的类型 |toTypeName(toString('123'))

toTypeName(toDate('2018-12-24'))|String

Date

## 字符串操作

### 基本字符串操作

函数 | 用途 | 举例 | 结果

---|---|---|---

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

### 字符串查找

函数 | 用途 | 举例 | 结果

---|---|---|---

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

### 字符串替换

函数 | 用途 | 举例 | 结果

---|---|---|---

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!

### 字符串分割

函数 | 用途 | 举例 | 结果

---|---|---|---

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']

### 字符串拼接

函数 | 用途 | 举例 | 结果

---|---|---|---

concat(s1,s2,...)| 将字符串拼接 |concat('123', 'abc', 'ABC')|123abcABC

## 条件语句

函数 | 用途 | 举例 | 结果

---|---|---|---

if(cond,then,else)| 条件输出 |if(1 > 2, '正确', '错误')| 错误

multiIf(cond_1, then_1, cond_2, then_2...else)| 多条件输出 |multiIf(1 > 2, '正确', 2 < 0, '正确', '错误')| 错误

case field when 1 then 11 when 2 then 22 else 33 end| 多条件输出 |case method when 'GET' then 'GET1' when 'POST' then 'POST1' else 0 end|

## 数学函数

函数 | 用途 | 举例 | 结果

---|---|---|---

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

## 舍入函数

函数 | 用途 | 举例 | 结果

---|---|---|---

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

## 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 DESC LIMIT 10 BY date| 取每天TOP10的域名

## json数据处理

函数 | 用途

---|---

visitParamExtractUInt(params, name)| 将名为“name”的字段的值解析成UInt64

visitParamExtractInt(params, name)| 与visitParamExtractUInt相同,但返回Int64。

visitParamExtractFloat(params, name)| 与visitParamExtractUInt相同,但返回Float64

visitParamExtractRaw(params, name)| 返回字段的值,包含空格符

visitParamExtractString(params, name)| 使用双引号解析字符串。这个值没有进行转义。如果转义失败,它将返回一个空白字符串 | visitParamExtractString('{"abc":"\\n\\u0000"}', 'abc') = '\n\0'

## url函数

函数 | 用途 |

---|---

protocol| 返回URL的协议 |

domain| 获取域名|

domainWithoutWWW| 返回域名并删除第一个'www.'

topLevelDomain| 返回顶级域名。例如:.ru

path| 返回URL路径

pathFull| 返回URL路径,包括请求参数和fragment。例如:/top/news.html?page=2#comments

queryString| 返回请求参数。例如:page=1&lr=213,请求参数不包含问号已经#以及#之后所有的内容

extractURLParameter(URL, name)| 返回URL请求参数中名称为‘name’的参数。如果不存在则返回一个空字符串。如果存在多个匹配项则返回第一个相匹配的。

extractURLParameters(URL)| 返回一个数组,其中以name=value的字符串形式返回url的所有请求参数。

decodeURLComponent(URL)| 返回已经解码的URL

## 数组函数

函数 | 用途

---|---

arrayElement(arr, n), operator arr[n]| 从数组arr中获取索引为“n”的元素 |

length| 返回数组中的元素个数。 结果类型是UInt64

arrayConcat| 合并参数中传递的所有数组

## Nullable处理函数

函数 | 用途 | 用法

---|---|---

isNull| 判断参数是否为NULL|isNull(x)

isNotNull| 判断参数是否不为NULL|isNotNull(x)

ifNull| 如果第一个参数为“NULL”,则返回第二个参数的值 |ifNull(x,alt)

## 常用语法

### 取最近10分钟内的数据

```

select col1 from table where at_timestamp between (toUnixTimestamp(now())-600)*1000 and toUnixTimestamp(now())*1000

select col1 from table where _at_timestamp_ between toDateTime(now()-300) and now()

```

### 趋势图时间粒度

```

select toDateTime((at_timestamp - at_timestamp%60000)/1000) as ttime,count(1) from ecs where at_timestamp between $time$ and $time$ group by ttime order by ttime desc

# 60000 是1min

select toStartOfInterval(_at_timestamp_,INTERVAL 5 minute,'Asia/Shanghai') as ttime,count(1) from ecs where _at_timestamp_ between ${begin_time} and ${end_time} group by ttime order by ttime desc

```

### 时区转换

```

select toDateTime(now(),'UTC');

```

### 行数据转列

```

select arrayJoin(splitByString('}, {',replaceRegexpAll('[{"desc": "desc1"}, {"desc": "desc2"}]','\\[\\{|\\}\\]','')))

```

## 更多用法

[更多用法](https://clickhouse.tech/docs/zh/ "更多用法")

计算机函数语法,clickhouse 函数语法相关推荐

  1. 计算机备注用if函数怎么算,Excel中IF函数的语法和用法

    函数说明 IF函数的主要作用是执行真假值判断,根据逻辑计算的真假值,返回不同结果. 可以使用函数 IF 对数值和公式进行条件检测. 函数语法 IF(logical_test,value_if_true ...

  2. Arduino 语法、函数使用、最常用函数、arduino教程、arduino笔记、参考手册

    文章目录 数字 I/O 模拟 I/O 高级 I/O 数学运算 三角函数 随机数 位操作 设置中断函数 开关中断 通讯 数字 I/O pinMode() 描述 将指定的引脚配置成输出或输入.详情请见di ...

  3. 2021年大数据常用语言Scala(十三):基础语法学习 函数 重点掌握

    目录 函数 重点掌握 定义函数 方法和函数的区别 方法转换为函数 完全体函数 函数 重点掌握 scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数 函数和我们的对象一样, ...

  4. 【汇总记忆:命令、语法、函数、等】

    目录 Linux常用操作 Python语法 numpy&scipy语法 Python常用 函数 和 操作 Linux常用操作 查看硬件信息: 磁盘空间:df -h 显卡型号和个数(没装驱动时) ...

  5. R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数

    R语言用户自定义函数的语法结构.编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等).编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据).应用自定函数 ...

  6. python函数速查_Python语法速查: 7. 函数基础

    本篇索引 (3)作用域 (4)递归 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当 ...

  7. python数列求和-加强版_ES6深入浅出-3 三个点运算 新版字符串-1.函数与对象的语法糖...

    主要讲的内容 时间充裕的话就讲,模板字面量 默认参数值 首先讲es6之前,我们是怎么做的.例如我们要写一个求和的函数, 请两个参数的和,但是如果有的人就是穿一个参数呢? 那么b没有传值,b的值是多少呢 ...

  8. Python基本语法_函数属性 参数类型 偏函数的应用

    目录 目录 前言 软件环境 Python Module的程序入口 函数的属性 Python函数的创建 函数的参数 必备参数 缺省参数 命名参数 不定长参数 匿名参数 偏函数的应用 前言 Python除 ...

  9. python函数名的语法_Python 基础语法六 ——函数

    一个程序可以按不同的功能实现拆分成不同的模块,而函数就是能实现某一部分功能的代码块. 1.函数的概述 定义:在Python中,定义个函数要使用 def 语句,一次写出函数名.括号.括号中的参数和冒号( ...

  10. python input与返回值-Python 详解基本语法_函数_返回值

    Python 详解基本语法 概要: 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返回给程序再由程序作出进一步的操作.可以说是函数的返回值令 ...

最新文章

  1. Screenlets:桌面小玩意
  2. Java运行时动态加载类之ClassLoader加载class及其依赖jar包
  3. 轻松构建基于 Serverless 架构的小程序
  4. c语言getchar用法_C语言 — 关键字
  5. 想知道大家毕业后的发展道路
  6. python时间戳转换并pandas批量转换时间戳
  7. fortran求解雷诺方程_方程的计算机处理94(5)_Cvs
  8. 前端学习(1921)vue之电商管理系统电商系统之绘制基本布局并且获取数据
  9. STM32 NVIC中断
  10. 创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH
  11. 机器学习笔记(二十四):召回率、混淆矩阵
  12. 四种依恋类型_你们之间的爱情是哪种类型 | 爱情依恋关系测评
  13. 基于matlab的倒立摆设计,基于MATLAB的倒立摆系统控制系统设计与仿真.doc
  14. oracle中如何查看日志,ORACLE报警日志如何查看
  15. 输入码(外码),国标码,区位码,机内码,字型码的概念与关系
  16. 雷鸟电视卸载自带应用和开机广告+停用自动更新
  17. nao机器人c语言编程教程,NAO机器人编程学习.pdf
  18. 影响未来的应用ifttt,互联网自主神经系统的又一个有力证据
  19. ICCV2019语义分割/UDA:ACE: Adapting to Changing Environments for Semantic SegmentationACE:适应变化环境下的语义分割
  20. AI 将完全取代前端开发吗?

热门文章

  1. SQL float 保留两位小数
  2. Oracle中的位运算以及推导公式
  3. c246芯片组服务器主板,支持Xeon E-2100系列:ASRock 华擎 发布 C246M WS 主板
  4. Spring Cloud Zuul路由网关(学习总结)
  5. Java实现DFA算法对敏感词、广告词过滤功能
  6. 自动化查询及增加配置参数功能
  7. 在linux本地下载ftp中的文件
  8. 如何用PHP和JavaScript比较时期(包括时间)
  9. JQuery访问json、js等文件
  10. B/S、C/S架构与视频对话技术