算数:
|运算符|示例|注释|
|----|----|----|
|加(a,b)|a + b|计算数字的总和。您还可以添加带有日期或日期和时间的整数。在日期的情况下,添加整数意味着添加相应的天数。对于具有时间的日期,这意味着添加相应的秒数。|
|减(a,b)|a - b|您还可以根据时间计算日期或日期的整数|
|乘以(a,b)|a * b|计算数字的乘积|
|除(a,b)|a / b|计算数字的商。结果类型始终是浮点类型。它不是整数除法。对于整数除法,请使用'intDiv'函数。当除以零时,你得到'inf',' - inf'或'nan'。|
|整数除|intDiv(a,b)|计算数字的商。分为整数,向下舍入(按绝对值)。除以零或将最小负数除以-1时抛出异常。|
|异常除|intDivOrZero(a,b)|与'intDiv'的不同之处在于它在除以零或将最小负数除以-1时返回零。|
|取余数|a % b|计算除法后的余数。如果参数是浮点数,则通过删除小数部分将它们预转换为整数。截断除法用于负数。除以零或将最小负数除以-1时抛出异常。|
|取反a| -a | 用反转符号计算一个数字。|
|取绝对值|abs(a)|计算数字(a)的绝对值。也就是说,如果a <0,则返回-a。对于无符号类型,它不执行任何操作。对于有符号整数类型,它返回无符号数。|
|取最大公约数|gcd(a,b)|返回数字的最大公约数。除以零或将最小负数除以-1时抛出异常|
|取最小公倍数|lcm(a,b)|返回数字的最小公倍数。除以零或将最小负数除以-1时抛出异常。|
比较
|运算符|示例|注释|
|----|----|----|
|相等|a == b||
|不等|a!=b,a<>b||
|小于|a
|大于|a>b||
|小于等于|a<=b ||
|大于等于|a>=b ||
逻辑运算符
接受任何数字类型,但返回等于0或1的UInt8数。
零作为参数被认为是“假”,而任何非零值被认为是“真”。
|运算符|示例|
|----|----|
|并|AND|
|或|OR|
|否|NOT|
类型转换
转换为数值类型:
toUInt8,toUInt16,toUInt32,toUInt64
toInt8,toInt16,toInt32,toInt64
toFloat32,toFloat64
TODATE,toDateTime
toUInt8OrZero,toUInt16OrZero,toUInt32OrZero,toUInt64OrZero,toInt8OrZero,toInt16OrZero,toInt32OrZero,toInt64OrZero,toFloat32OrZero,toFloat64OrZero,toDateOrZero,toDateTimeOrZero
toUInt8OrNull,toUInt16OrNull,toUInt32OrNull,toUInt64OrNull,toInt8OrNull,toInt16OrNull,toInt32OrNull,toInt64OrNull,toFloat32OrNull,toFloat64OrNull,toDateOrNull,toDateTimeOrNull
toDecimal32(value,S),toDecimal64(value,S),toDecimal128(value,S)
该value可以是一个数字或一个字符串。S参数指定小数位的数量。
转换为字符串类型:
toString
用于在数字、字符串(但不是固定字符串)、日期和日期与时间之间进行转换的函数。所有这些函数都接受一个参数。
在转换为字符串或从字符串转换时,将使用与选项卡分隔格式(以及几乎所有其他文本格式)相同的规则对值进行格式化或解析。如果无法解析字符串,则抛出异常并取消请求。
当将日期转换为数字或反之亦然时,日期对应自Unix纪元开始以来的天数。当将日期与时间转换为数字或反之亦然时,日期与时间对应自Unix纪元开始以来的秒数。
toDate/toDateTime
如果从UInt32、Int32、UInt64或Int64数字类型转换到日期,并且该数字大于或等于65536,则该数字将被解释为Unix时间戳(而不是天数),并四舍五入到日期。这允许支持写入“toDate(unix_timestamp)”的常见情况,否则这将是一个错误,需要编写更麻烦的“toDate(toDateTime(unix_timestamp))”。
日期和带时间的日期之间的转换以一种自然的方式执行:添加一个空时间或删除时间。
DateTime参数的toString函数可以接受包含时区名称的第二个字符串参数。例如:Asia/Yekaterinburg在本例中,时间是按照指定的时区格式化的。
toString(now(), 'Asia/Yekaterinburg')
toFixedString(s, N)
将字符串类型参数转换为FixedString(N)类型(长度为N的字符串)。N必须是常量。如果字符串的字节数小于N,则向右传递null字节。如果字符串的字节数超过N,则抛出异常。
toStringCutToZero(s)
接受字符串或FixedString参数。返回在找到的第一个零字节处截断内容的字符串。
reinterpretAsUInt8, reinterpretAsUInt16, reinterpretAsUInt32, reinterpretAsUInt64
reinterpretAsInt8, reinterpretAsInt16, reinterpretAsInt32, reinterpretAsInt64
reinterpretAsFloat32, reinterpretAsFloat64
reinterpretAsDate, reinterpretAsDateTime
这些函数接受字符串并将字符串开头的字节解释为按主机顺序排列的数字(小端)。如果字符串不够长,函数的工作方式就像用必要的空字节数填充字符串一样。如果字符串比需要的长,则忽略额外的字节。日期被解释为自Unix纪元开始以来的天数,带有时间的日期被解释为自Unix纪元开始以来的秒数。
reinterpretAsString
该函数接受一个数字、日期或带时间的日期,并返回一个字符串,其中包含以主机顺序(小端)表示相应值的字节。空字节从末尾删除。
reinterpretAsFixedString
该函数接受一个数字、日期或带时间的日期,并返回一个FixedString,其中包含以主机顺序(小端)表示相应值的字节。空字节从末尾删除。
CAST(x, t)
将“x”转换为“t”数据类型
转换为FixedString(N)只适用于String或FixedString(N)类型的参数。
toIntervalYear, toIntervalQuarter, toIntervalMonth, toIntervalWeek, toIntervalDay, toIntervalHour, toIntervalMinute, toIntervalSecond
将数字类型参数转换为区间类型(持续时间)。interval类型实际上非常有用,您可以使用这种类型的数据直接对Date或DateTime执行算术操作。同时,ClickHouse为声明间隔类型数据提供了更方便的语法。例如:
```
WITH
toDate('2019-01-01') AS date,
INTERVAL 1 WEEK AS interval_week,
toIntervalWeek(1) AS interval_to_week
SELECT
date + interval_week,
date + interval_to_week
```
parseDateTimeBestEffort
将数字类型参数解析为日期或DateTime类型。与toDate和toDateTime不同,parseDateTimeBestEffort可以改进更复杂的日期格式
parseDateTimeBestEffortOrNull
与parseDateTimeBestEffort相同,只是当遇到无法处理的日期格式时返回null。
parseDateTimeBestEffortOrZero
与parseDateTimeBestEffort相同,只是当遇到无法处理的日期格式时,它返回零日期或零日期时间。