内置函数

数学函数

abs(double a)

功能: 返回参数的绝对值

返回类型:double类型

使用说明:使用该函数需要确保函数的返回值是整数。

acos(double a)

功能: 返回参数的反余弦值

返回类型:double类型

asin(double a)

功能: 返回参数的反正弦值

返回类型:double类型

atan(double a)

功能: 返回参数的反正切值

返回类型:double类型

bin(bigint a)

功能: 返回整型的二进制表示形式(即0 和1 序列)

返回类型:string类型

mysql> select bin(10);
 +---------+
 | bin(10) |
 +---------+
 | 1010    |
 +---------+
 1 row in set (0.01 sec)

ceil(double a)

ceiling(double a)

dceil(double a)

功能: 返回大于等于该参数的最小整数

返回类型:int类型

conv(bigint num, int from_base, int to_base)

conv(string num,int from_base, int to_base)

功能: 进制转换函数,返回某个整数在特定进制下的的字符串形式。输入参数可以是整型的字符串形式。如果想要将函数的返回值转换成整数,可以使用CAST函数。

返回类型:string类型

举例:

mysql> select conv(64,10,8);
 +-----------------+
 | conv(64, 10, 8) |
 +-----------------+
 | 100             |
 +-----------------+
 1 row in set (0.01 sec)

 mysql> select cast(conv('fe', 16, 10) as int) as "transform_string_to_int";
 +-------------------------+
 | transform_string_to_int |
 +-------------------------+
 |                     254 |
 +-------------------------+
 1 row in set (0.00 sec)

cos(double a)

功能:返回参数的余弦值

返回类型:double类型

degrees(double a)

功能:将弧度转成角度

返回类型:double类型

e()

功能:返回数学上的常量e

返回类型:double类型

exp(double a)

dexp(double a)

功能: 返回e 的a 次幂(即ea)

返回类型: double 类型

floor(double a)

dfloor(double a)

功能:返回小于等于该参数的最大整数

返回类型:int类型

fmod(double a, double b)

fmod(float a, float b)

功能:返回a除以b的余数。等价于%算术符

返回类型:float或者double类型

举例:

mysql> select fmod(10,3);
 +-----------------+
 | fmod(10.0, 3.0) |
 +-----------------+
 |               1 |
 +-----------------+
 1 row in set (0.01 sec)

 mysql> select fmod(5.5,2);
 +----------------+
 | fmod(5.5, 2.0) |
 +----------------+
 |            1.5 |
 +----------------+
 1 row in set (0.01 sec)

greatest(bigint a[, bigint b ...])

greatest(double a[, double b ...])

greatest(decimal(p,s) a[, decimal(p,s) b ...])

greatest(string a[, string b ...])

greatest(timestamp a[, timestamp b ...])

功能:返回列表里的最大值

返回类型:和参数类型相同

hex(bigint a)

hex(string a)

功能:返回整型或字符串中各个字符的16进制表示形式。

返回类型:string类型

举例:

mysql> select hex('abc');
 +------------+
 | hex('abc') |
 +------------+
 | 616263     |
 +------------+
 1 row in set (0.01 sec)

 mysql> select unhex(616263);
 +---------------+
 | unhex(616263) |
 +---------------+
 | abc           |
 +---------------+
 1 row in set (0.01 sec)

least(bigint a[, bigint b ...])

least(double a[, double b ...])

least(decimal(p,s) a[, decimal(p,s) b ...])

least(string a[, string b ...])

least(timestamp a[, timestamp b ...])

功能:返回列表里的最小值

返回类型:和参数类型相同

ln(double a)

dlog1(double a)

功能:返回参数的自然对数形式

返回类型:double类型

log(double base, double a)

功能:返回log以base为底数,以a为指数的对数值。

返回类型:double类型

log10(double a)

dlog10(double a)

功能:返回log以10为底数,以a为指数的对数值。

返回类型:double类型

log2(double a)

功能:返回log以2为底数,以a为指数的对数值。

返回类型:double类型

mod(numeric_type a, same_type b)

功能:返回a除以b的余数。等价于%算术符。

返回类型:和输入类型相同

举例:

mysql> select mod(10,3);
 +------------+
 | mod(10, 3) |
 +------------+
 |          1 |
 +------------+
 1 row in set (0.01 sec)

 mysql> select mod(5.5,2);
 +-------------+
 | mod(5.5, 2) |
 +-------------+
 |         1.5 |
 +-------------+
 1 row in set (0.01 sec)

negative(int a)

negative(double a)

功能:将参数a的符号位取反,如果参数是负值,则返回正值

返回类型:根据输入参数类型返回int类型或double类型

使用说明:如果你需要确保所有返回值都是负值,可以使用-abs(a)函数。

pi()

功能:返回常量Pi

返回类型: double类型

pmod(int a, int b)

pmod(double a, double b)

功能:正取余函数

返回类型:int类型或者double类型(由输入参数决定)

positive(int a)

功能:返回参数的原值,即使参数是负的,仍然返回原值。

返回类型:int类型

使用说明:如果你需要确保所有返回值都是正值,可以使用abs()函数。

pow(double a, double p)

power(double a, double p)

功能:返回a的p次幂

返回类型:double类型

radians(double a)

功能:将弧度转换成角度

返回类型:double类型

rand()

rand(int seed)

random()

random(int seed)

功能:返回0~1之间的随机值。参数为随机种子。

返回类型:double

使用说明:每次查询的随机序列都会重置,多次调用rand 函数会产生相同的结果。如果每次查询想产生不同的结果,可以在每次查询时使用不同的随机种子。例如select rand(unix_timestamp()) from ...

round(double a)

round(double a, int d)

功能: 取整函数。如果只带一个参数,该函数会返回距离该值最近的整数。如果带2个参数,第二个参数为小数点后面保留的位数。

返回类型:如果参数是浮点类型则返回bigint。如果第二个参数大于1,则返回double类型。

举例:

mysql> select round(100.456, 2);
 +-------------------+
 | round(100.456, 2) |
 +-------------------+
 |            100.46 |
 +-------------------+
 1 row in set (0.02 sec)

sign(double a)

功能:如果a是整数或者0,返回1;如果a是负数,则返回-1

返回类型:int类型

sin(double a)

功能:返回a的正弦值

返回类型:double类型

sqrt(double a)

功能:返回a的平方根

返回类型:double类型

tan(double a)

功能:返回a的正切值

返回类型:double类型

unhex(string a)

功能:把十六进制格式的字符串转化为原来的格式

返回类型:string类型

举例:

mysql> select hex('abc');
 +------------+
 | hex('abc') |
 +------------+
 | 616263     |
 +------------+
 1 row in set (0.01 sec)

 mysql> select unhex(616263);
 +---------------+
 | unhex(616263) |
 +---------------+
 | abc           |
 +---------------+
 1 row in set (0.01 sec)

位操作函数

bitand(integer_type a, same_type b)

功能:按位与运算

返回类型: 和输入类型相同

举例:

mysql> select bitand(255, 32767); /* 0000000011111111 & 0111111111111111 */
 +--------------------+
 | bitand(255, 32767) |
 +--------------------+
 |                255 |
 +--------------------+
 1 row in set (0.01 sec)

 mysql> select bitand(32767, 1); /* 0111111111111111 & 0000000000000001 */
 +------------------+
 | bitand(32767, 1) |
 +------------------+
 |                1 |
 +------------------+
 1 row in set (0.01 sec)

 mysql> select bitand(32, 16); /* 00010000 & 00001000 */
 +----------------+
 | bitand(32, 16) |
 +----------------+
 |              0 |
 +----------------+
 1 row in set (0.01 sec)

 mysql> select bitand(12,5); /* 00001100 & 00000101 */
 +---------------+
 | bitand(12, 5) |
 +---------------+
 |             4 |
 +---------------+
 1 row in set (0.01 sec)

 mysql> select bitand(-1,15); /* 11111111 & 00001111 */
 +----------------+
 | bitand(-1, 15) |
 +----------------+
 |             15 |
 +----------------+
 1 row in set (0.01 sec)

bitnot(integer_type a)

功能:按位非运算

返回类型:和输入类型相同

举例:

mysql> select bitnot(127); /* 01111111 -> 10000000 */
 +-------------+
 | bitnot(127) |
 +-------------+
 |        -128 |
 +-------------+
 1 row in set (0.01 sec)

 mysql> select bitnot(16); /* 00010000 -> 11101111 */
 +------------+
 | bitnot(16) |
 +------------+
 |        -17 |
 +------------+
 1 row in set (0.01 sec)

 mysql> select bitnot(0); /* 00000000 -> 11111111 */
 +-----------+
 | bitnot(0) |
 +-----------+
 |        -1 |
 +-----------+
 1 row in set (0.01 sec)

 mysql> select bitnot(-128); /* 10000000 -> 01111111 */
 +--------------+
 | bitnot(-128) |
 +--------------+
 |          127 |
 +--------------+
 1 row in set (0.01 sec)

bitor(integer_type a, same_type b)

功能:按位或运算

返回类型:和输入类型相同

举例:

mysql> select bitor(1,4); /* 00000001 | 00000100 */
 +-------------+
 | bitor(1, 4) |
 +-------------+
 |           5 |
 +-------------+
 1 row in set (0.01 sec)

 mysql> select bitor(16,48); /* 00001000 | 00011000 */
 +---------------+
 | bitor(16, 48) |
 +---------------+
 |            48 |
 +---------------+
 1 row in set (0.01 sec)

 mysql> select bitor(0,7); /* 00000000 | 00000111 */
 +-------------+
 | bitor(0, 7) |
 +-------------+
 |           7 |
 +-------------+
 1 row in set (0.01 sec)

bitxor(integer_type a, same_type b)

功能:按位异或运算

返回类型:和输入类型相同

举例:

mysql> select bitxor(0,15); /* 00000000 ^ 00001111 */
 +---------------+
 | bitxor(0, 15) |
 +---------------+
 |            15 |
 +---------------+
 1 row in set (0.01 sec)

 mysql> select bitxor(7,7); /* 00000111 ^ 00000111 */
 +--------------+
 | bitxor(7, 7) |
 +--------------+
 |            0 |
 +--------------+
 1 row in set (0.01 sec)

 mysql> select bitxor(8,4); /* 00001000 ^ 00000100 */
 +--------------+
 | bitxor(8, 4) |
 +--------------+
 |           12 |
 +--------------+
 1 row in set (0.01 sec)

 mysql> select bitxor(3,7); /* 00000011 ^ 00000111 */
 +--------------+
 | bitxor(3, 7) |
 +--------------+
 |            4 |
 +--------------+
 1 row in set (0.01 sec)

类型转换函数

cast(expr as type)

转换函数通常会和其他函数一同使用,显示的将expression转换成指定的参数类型。Palo对于函数的参数类型有严格的数据类型定义。例如Palo不会自动将bigtint转换成int类型,或者其余可能会损失精度或者产生溢出的转换。用户使用cast函数可以把列值或者字面常量转换成函数参数需要的其他类型。

举例:

mysql> select concat('Here are the first ', cast(10 as string), ' results.');
 +-------------------------------------------------------------------+
 | concat('Here are the first ', CAST(10 AS CHARACTER), ' results.') |
 +-------------------------------------------------------------------+
 | Here are the first 10 results.                                    |
 +-------------------------------------------------------------------+
 1 row in set (0.01 sec)

日期和时间函数

Palo支持的时间类型是TIMESTAMP,包括DATE和DATETIME两种类型。TIMESTAMP包含date和time两部分,日期和时间函数可以抽取出单个字段,如hour(), minute()。通常这些函数的返回值是整型。格式化日期的函数(如date_add())的返回值是字符串类型。用户可以通过加上或减去时间间隔来改变时间类型的值。时间间隔通常作为date_add()和date_sub()的第二个参数。Palo支持如下的日期和时间函数。

add_months(timestamp date, int months)

add_months(timestamp date, bigint months)

功能:返回指定date加上months个月的新date。和months_add()相同

返回类型:timestamp类型

举例:

如果这个月的这一日并不存在于目标月中,那么结果将是那个月的最后一天;如果参数中的months是负数,则是求先前的月。

mysql> select now(), add_months(now(), 2);
 +---------------------+---------------------+
 | now()               | add_months(now(), 2)|
 +---------------------+---------------------+
 | 2016-05-31 10:47:00 | 2016-07-31 10:47:00 |
 +---------------------+---------------------+
 1 row in set (0.01 sec)

 mysql> select now(), add_months(now(), 1);
 +---------------------+---------------------+
 | now()               | add_months(now(), 1)|
 +---------------------+---------------------+
 | 2016-05-31 10:47:14 | 2016-06-30 10:47:14 |
 +---------------------+---------------------+
 1 row in set (0.01 sec)

 mysql> select now(), add_months(now(), -1);
 +---------------------+----------------------+
 | now()               | add_months(now(), -1)|
 +---------------------+----------------------+
 | 2016-05-31 10:47:31 | 2016-04-30 10:47:31  |
 +---------------------+----------------------+
 1 row in set (0.01 sec)

adddate(timestamp startdate, int days)

adddate(timestamp startdate, bigint days)

功能:给startdate加上指定的天数

返回类型:timestamp类型

<