ClickHouse常⽤函数
-- 计算数字的总和。 您还可以将Date或DateTime与整数进⾏相加。在Date的情况下,添加的整数意味着添加相应的天数。对于DateTime,这意味这添加相应的秒数。
SELECT plus(1, 1);
SELECT plus(toDate('2019-7-31'), 1);
-- 计算数字之间的差,结果总是有符号的。您还可以将Date或DateTime与整数进⾏相减。见上⾯的'plus'。
SELECT minus(1, 1);
SELECT minus(toDate('2019-7-31'), 1);
-- 计算数字的乘积。
SELECT multiply(1.23654111111110215, 1.21589654421111111111);
-- 计算数字的商。结果类型始终是浮点类型。 它不是整数除法。对于整数除法,请使⽤'intDiv'函数。 当
除以零时,你得到'inf','-
inf'或'nan'。
SELECT divide(1.23 , 1.11);
-- 计算整数数字的商,向下舍⼊(按绝对值)。 除以零或将最⼩负数除以-1时抛出异常。
SELECT intDiv(1.23 , 1.11);
-- 'intDivOrZero'与'intDiv'的不同之处在于它在除以零或将最⼩负数除以-1时返回零。
SELECT intDivOrZero(1.23 , 0);
-- 计算除法后的余数。 如果参数是浮点数,则通过删除⼩数部分将它们预转换为整数。 其余部分与C++中的含义相同。截断除法⽤于负数。 除以零或将最⼩负数除以-1时抛出异常。
SELECT modulo(5.32 , 2);
-- 计算⼀个数字的 ⽤反转符号计算⼀个数字。
SELECT negate(2);
-- ⽐较函数
SELECT (1<2);
-- 逻辑函数
SELECT not(1<2);
--类型转换函数
SELECT toFloat32(1<2);
SELECT toFloat64(1<2);
SELECT toUInt8OrZero('255');
SELECT toUInt8OrNull('a');
SELECT toDateOrZero('2019-1-31');
-- DateTime参数的toString函数可以在第⼆个参数中包含时区名称。 例如:Asia/Yekaterinburg在这种情况下,时间根据指定的时区进⾏格式化。
SELECT now() AS now_local, toString(now(), 'Asia/Yekaterinburg') AS now_yekat
-- 将value转换为精度为S的Decimal。value可以是数字或字符串。S参数为指定的⼩数位数。
SELECT toDecimal128(123.2158745233611105, 32)
--将String类型的参数转换为FixedString(N)类型的值(具有固定长度N的字符串)。N必须是⼀个常量。 如果字符串的字节数少于N,则向右填充空字节。如果字符串的字节数多于N,则抛出异常。
SELECT toFixedString('123.21', 8)
-- 将‘x’转换为‘t’数据类型。还⽀持语法CAST(x AS t)
SELECT
'2016-06-15 23:00:00' AS timestamp,
CAST(timestamp AS DateTime) AS datetime,
CAST(timestamp AS Date) AS date,
CAST(timestamp, 'String') AS string,
CAST(timestamp, 'FixedString(22)') AS fixed_string
--将Date或DateTime转换为包含年份编号(AD)的UInt16类型的数字。
SELECT toYear(now())
-- 将Date或DateTime转换为包含季度编号的UInt8类型的数字。
SELECT toQuarter(now())
-- 将Date或DateTime转换为包含⽉份编号(1-12)的UInt8类型的数字。
SELECT toMonth(now())
-- 将Date或DateTime转换为包含⼀年中的某⼀天的编号的UInt16(1-366)类型的数字。
SELECT toDayOfYear(now())
-- 将Date或DateTime转换为包含⼀⽉中的某⼀天的编号的UInt8(1-31)类型的数字。
SELECT toDayOfMonth(now())
-
- 将Date或DateTime转换为包含⼀周中的某⼀天的编号的UInt8(周⼀是1, 周⽇是7)类型的数字。
SELECT toDayOfWeek(now())
-- 将DateTime转换为包含24⼩时制(0-23)⼩时数的UInt8数字。
--这个函数假设如果时钟向前移动,它是⼀个⼩时,发⽣在凌晨2点,如果时钟被移回,它是⼀个⼩时,发⽣在凌晨3点(这并⾮总是如此 -即使在莫斯科时钟在不同的时间两次改变)
SELECT toHour(toDateTime('2019-07-01 00:00:00'))
--将DateTime转换为包含⼀⼩时中分钟数(0-59)的UInt8数字。
SELECT toMinute(toDateTime('2019-07-01 00:00:00'))
--将DateTime转换为包含⼀分钟中秒数(0-59)的UInt8数字。 闰秒不计算在内。
SELECT toSecond(toDateTime('2019-07-01 00:00:59'))
--将DateTime转换为unix时间戳(秒)。
SELECT toUnixTimestamp(toDateTime('2019-07-01 00:00:59'))
--将Date或DateTime向前取整到本年的第⼀天。 返回Date类型
SELECT toStartOfYear(toDateTime('2019-07-01 00:00:59'))
--将Date或DateTime向前取整到ISO本年的第⼀天。 返回Date类型。
SELECT toStartOfISOYear(toDateTime('2019-07-01 00:00:59'))
--将Date或DateTime向前取整到本季度的第⼀天。 返回Date类型。
SELECT toStartOfQuarter(toDateTime('2019-07-01 00:00:59'))
--将Date或DateTime向前取整到本⽉的第⼀天。 返回Date类型。
SELECT toStartOfMonth(toDateTime('2019-07-01 00:00:59'))
--将Date或DateTime向前取整到本周的星期⼀。 返回Date类型。
SELECT toMonday(toDateTime('2019-07-31 00:00:59'))
-- 将DateTime向前取整到当⽇的开始
SELECT toStartOfDay(toDateTime('2019-07-31 21:00:59'))
-- 将DateTime向前取整到当前⼩时的开始。
SELECT toStartOfHour(toDateTime('2019-07-31 21:00:59'))
-- 将DateTime向前取整到当前分钟的开始。
SELECT toStartOfMinute(toDateTime('2019-07-31 21:10:59'))
-- 将DateTime以⼗五分钟为单位向前取整到最接近的时间点。
SELECT toStartOfFifteenMinutes(toDateTime('2019-07-31 21:20:59'))
--toStartOfInterval(time_or_data, INTERVAL x unit [, time_zone])¶
--这是名为toStartOf*的所有函数的通⽤函数。
--例如, toStartOfInterval(t,INTERVAL 1 year)返回与toStartOfYear(t)相同的结果,
-- toStartOfInterval(t,INTERVAL 1 month)返回与toStartOfMonth(t)相同的结果,
-
-toStartOfInterval(t,INTERVAL 1 day)返回与toStartOfDay(t)相同的结果,
--toStartOfInterval(t,INTERVAL 15 minute)返回与toStartOfFifteenMinutes(t)相同的结果。
SELECT toStartOfInterval(toDateTime('2019-07-31 21:20:59'),INTERVAL 1 MINUTE)
-- 不接受任何参数并在请求执⾏时的某⼀刻返回当前时间(DateTime)。 此函数返回⼀个常量,即时请求需要很长时间能够完成。
SELECT now()
-- 不接受任何参数并在请求执⾏时的某⼀刻返回当前⽇期(Date)。 其功能与'toDate(now())'相同
SELECT today()
--不接受任何参数并在请求执⾏时的某⼀刻返回昨天的⽇期(Date)。 其功能与'today() - 1'相同。
SELECT yesterday()
--将Date或DateTime转换为包含年份和⽉份编号的UInt32类型的数字(YYYY * 100 + MM)
SELECT toYYYYMM(now())
replaceall()--将Date或DateTime转换为包含年份和⽉份编号的UInt32类型的数字(YYYY * 10000 + MM * 100 + DD)。
SELECT toYYYYMMDD(now())
--将Date或DateTime转换为包含年份和⽉份编号的UInt64类型的数字(YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss)
SELECT toYYYYMMDDhhmmss(now())
-- addYears, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addQuarters¶
-- 函数将⼀段时间间隔添加到Date/DateTime,然后返回Date/DateTime。例如:
WITH
toDate('2018-01-01') AS date,
toDateTime('2018-01-01 00:00:00') AS date_time
SELECT
addYears(date, 1) AS add_years_with_date,
addMonths(date_time, 1) AS add_years_with_date_time
-- subtractYears, subtractMonths, subtractWeeks, subtractDays, subtractHours, subtractMinutes, subtractSeconds, subtractQuarters¶
-- 函数将Date/DateTime减去⼀段时间间隔,然后返回Date/DateTime
WITH
toDate('2019-01-01') AS date,
toDateTime('2019-01-01 00:00:00') AS date_time
SELECT
subtractYears(date, 1) AS subtract_years_with_date,
subtractDays(date_time, 1) AS subtract_years_with_date_time
--dateDiff('unit', t1, t2, [timezone])
-- 返回以'unit'为单位表⽰的两个时间之间的差异,例如'hours' : t2 - t1
--'t1'和't2'可以是Date或DateTime,如果指定'timezone',它将应⽤于两个参数。如果不是,则使⽤来⾃数据类型't1'和't2'的时区。如果时区不相同,则结果将是未定义的。
SELECT dateDiff('year', toDate('2019-11-01'), toDate('2021-02-01'))
--对于空字符串返回1,对于⾮空字符串返回0。 结果类型是UInt8。 如果字符串包含⾄少⼀个字节,则该字符串被视为⾮空字符串,即使这是⼀个空格或空字符。 该函数也适⽤于数组。
SELECT empty('1')
--对于空字符串返回0,对于⾮空字符串返回1。 结果类型是UInt8。 该函数也适⽤于数组。
SELECT notEmpty('1')
--返回字符串的字节长度。 结果类型是UInt64。 该函数也适⽤于数组。
SELECT length('afdffg')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。