GreenPlum支持的函数比较多,不仅支持常见的函数,例如数学函数、字符串函数、位串函数、时间/日期函数和聚集函数,页包含特殊的函数,例如网络地址函数、几何函数等。
本篇主要从以上几个方面介绍GreenPlum的函数迁移。
1.1.1. 数学函数
1.1.1.1. abs(x)
求参数的绝对值
GBase 替代:abs
1.1.1.2. acos(x)
反余弦
GBase 替代:acos
1.1.1.3. asin(x)
反正弦
GBase 替代:asin
1.1.1.4. atan(x) atan2(y,x)
反正切,y/x的反正切
GBase 替代:atan, atan2
1.1.1.5. cbrt(x)
求参数的立方根
GBase 替代:无
1.1.1.6. ceil(x) ceiling(x)
不小于参数的最小整数
GBase 替代:CEIL
1.1.1.7. cos(x)
余弦
GBase 替代:cos
1.1.1.8. cot(x)
余切
GBase 替代:cot
1.1.1.9. degrees(x)
把弧度转为角度
GBase 替代:degrees
1.1.1.10. exp(x)
自然指数
GBase 替代:exp
1.1.1.11. floor(x)
不大于参数的最大整数
GBase 替代:floor
1.1.1.12. ln(x)
自然对数
GBase 替代:ln
1.1.1.13. log(x) log(b, x)
以10为底的对数, 以b为底的对数
GBase 替代:log
1.1.1.14. mod(y, x)
y/x的余数(模)
GBase 替代:mod
1.1.1.15. pi()
π的值
GBase 替代:pi
1.1.1.16. power(a,b)
a的b次幂
GBase 替代:power
1.1.1.17. radians(x)
把角度转为弧度
GBase 替代:radians
1.1.1.18. round(x) round(x,d)
四舍五入到最接近的整数,对参数x进行四舍五入,小数点后保留d位
GBase 替代:round
1.1.1.19. sin(x)
正弦
GBase 替代:sin
1.1.1.20. sign(x)
参数的符号(-1,0,+1)
GBase 替代:sign
1.1.1.21. sqrt(x)
平方根
GBase 替代:sqrt
1.1.1.22. tan(x)
正切
GBase 替代:tan
1.1.1.23. trunc(x) trunc(v,s)
截断,截断为s位小数
GBase 替代:trunc
1.1.2. 日期/时间函数
1.1.2.1. age(timestamp) age(timestamp, timestamp)
减去参数后的符号化结果,使用年、月和天,如果仅提供一个参数则由当前时间减去参数
1.1.2.2. clock_timestamp()
实时时钟的当前时间戳
1.1.2.3. current_date
当前的日期
GBase 替代:current_date
1.1.2.4. current_time
当前时间
GBase 替代:current_time
1.1.2.5. current_timestamp
当前事务开始时的时间戳
GBase 替代:current_timestamp
1.1.2.6. date_part(text,timestamp) date_part(text, interval)
获取子域
GBase 替代:extract
1.1.2.7. date_trunc(text, timestamp) date_trunc(text, interval)
截断成指定精度
GBase 替代:trunc
1.1.2.8. extral(field from timestamp/interval)
获取子域
GBase 替代:extral
1.1.2.9. isfinite
测试是否为有穷日期,是否是有穷时间戳,是否是有穷时间间隔
1.1.2.10. localtime
当日时间
GBase 替代:localtime
1.1.2.11. localtimestamp
当日事务开始时的时间戳
GBase 替代:localtimestamp
1.1.2.12. make_date(year int, month int, day int)
为年、月和日字段创建日期
GBase 替代:make_date
1.1.2.13. make_time(hour int, min int, sec double precision)
从小时、分钟和秒字段中创建时间
GBase 替代:make_time
1.1.2.14. now()
当前事务开始时的时间戳
GBase 替代:now
1.1.2.15. timeofday()
实时时钟的当前时间戳
1.1.3. 聚合函数
GREENPLUM支持 17个聚合函数,其中11个可以被 GBase 替换。
可被GBase替换的聚合函数如下: AVG,COUNT,MAX,MIN,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VAR_POP,VAR_SAMP,VARIANCE。
1.1.3.1. AVG
返回组中值的平均值。
语法:AVG( [ALL | DISTINCT] expr ) [ OVER ( analytic_clause ) ]
GBase 替换:AVG[DISTINCT/ALL] expr)OVER([PARTITION BY …] [ORDER BY … [ASC/DESC] ]
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT AVG(salary) "Average" FROM employees; | SELECT AVG(salary) "Average" FROM employees; |
结果 | 6461.68224299065 | 6461.6822429907 |
1.1.3.2. CORR
返回一对表达式的相关系数,它是如下的缩写:
COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)*STDDEV_POP(expr2))
从统计上讲,相关性是变量之间关联的强度,变量之间的关联意味着在某种程度上一个变量的值可由其它的值进行预测。通过返回一个-1~1之间的一个数, 相关系数给出了关联的强度,0表示不相关。
GBase 替换: 可以使用数学函数按公式来计算。
1.1.3.3. COUNT
对一组内发生的事情进行累积计数,如果指定*或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。
语法:COUNT( [ DISTINCT | ALL ] expr ) [ OVER ( analytic_clause )]
GBase 替换:COUNT(*/[DISTINCT] col ) OVER([PARTITION BY col_name1,col_name2,…] [ORDER BY col_name1 [ASC/DESC], col_name2 [ASC/DESC],…] )
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT COUNT(*) "Total" FROM employees; | SELECT COUNT(*) Total FROM employees; |
结果 | 107 | 107 |
1.1.3.4. COVAR_POP
返回一对表达式的总体协方差。它是下面这个公式的简写:(SUM(expr1 * expr2) - SUM(expr1) * SUM(expr2) / n) / (n-1)
语法:COVAR_POP( expr1 , expr2 ) [OVER ( analytic_clause ) ]
GBase 替换:可以使用数学函数按公式来计算。
1.1.3.5. COVAR_SAMP
返回一对表达式的样本协方差。它是下面这个公式的简写:(SUM(expr1 * expr2) - SUM(expr1) * SUM(expr2) / n) / (n-1)
语法:COVAR_SAMP( expr1 , expr2 ) [OVER ( analytic_clause ) ]
GBase 替换:可以使用数学函数按公式来计算。
1.1.3.6. MAX
在一个组中的数据窗口中查找表达式的最大值。
语法:MAX ( [ DISTINCT | ALL ] expr ) [OVER ( analytic_clause )]
GBase 替换:MAX ( [ DISTINCT | ALL ] expr )。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT MAX(salary) "Maximum" FROM employees; | SELECT MAX(salary) "Maximum" FROM employees; |
结果 | 24000 | 24000 |
1.1.3.7. MIN
在一个组中的数据窗口中查找表达式的最小值。
语法:MIN ( [ DISTINCT | ALL ] expr ) [OVER ( analytic_clause )]
GBase 替换:MIN ( [ DISTINCT | ALL ] expr )。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT MIN(salary) "Maximum" FROM employees; | SELECT MIN(salary) "Maximum" FROM employees; |
结果 | 2100 | 2100 |
1.1.3.8. PERCENTILE_CONT
这个函数是一个反分布函数,它假设了一个连续分布模式。返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数PERCENT_RANK,如果没有正好对应的数据值,就通过下面算法来得到值:RN = 1+ (P*(N-1)) 其中P是输入的分布百分比值,N是组内的行数。
语法:
PERCENTILE_CONT ( expr ) WITHIN GROUP ( ORDER BY expr [ DESC | ASC ] )
[OVER ( query_partition_clause )]
1.1.3.9. PERCENTILE_DISC
一个反分布函数,它假设了一个离散分布模式。返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数CUME_DIST,如果没有正好对应的数据值,就取大于该分布值的下一个值。
语法:
PERCENTILE_DISC ( expr ) WITHIN GROUP ( ORDER BY expr [ DESC | ASC ] )
[OVER ( query_partition_clause )]
1.1.3.10. PERCENT_RANK
和CUME_DIST(累积分配)函数类似,对于一个组中给定的行来说,在计算那行的序号时,先减1,然后除以n-1(n为组中所有的行数)。该函数总是返回0~1(包括1)之间的数。
语法:
PERCENT_RANK ( expr [, expr]... ) WITHIN GROUP
( ORDER BY
expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
[, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
)
1.1.3.11. STDDEV
计算当前行关于组的标准偏离。(Standard Deviation),同于STDDEV_SAMP。
语法:STDDEV ( [ DISTINCT | ALL ] expr ) [OVER ( analytic_clause )]
GBase 替代: STDDEV_SAMP ( [ DISTINCT | ALL ] expr )。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT STDDEV(salary) "Deviation" FROM employees; | SELECT STDDEV_SAMP(salary) "Deviation" FROM employees; |
结果 | 3909.36574645906 | 3909.3657464591 |
1.1.3.12. STDDEV_POP
计算当前行关于组的总体标准偏离。(Standard Deviation-Population)
语法:STDDEV_POP ( [ DISTINCT | ALL ] expr ) [OVER ( analytic_clause )]
GBase 替代: STDDEV ,STDDEV_POP ( [ DISTINCT | ALL ] expr )。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT STDDEV_POP(salary) "Deviation" FROM employees; | SELECT STDDEV_POP(salary) "Deviation" FROM employees; |
结果 | 3891.05479920707 | 3891.0547992071 |
1.1.3.13. STDDEV_SAMP
计算当前行关于组的标准偏离。(Standard Deviation),同于STDDEV
语法:STDDEV_SAMP ( [ DISTINCT | ALL ] expr ) [OVER ( analytic_clause )]
GBase 替代:STDDEV_ SAMP ( [ DISTINCT | ALL ] expr )。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT STDDEV_SAMP(salary) "Deviation" FROM employees; | SELECT STDDEV_ SAMP (salary) "Deviation" FROM employees; |
结果 | 3909.36574645906 | 3909.3657464591 |
1.1.3.14. SUM
该函数计算组中表达式的累积和。
语法:SUM ( [ DISTINCT | ALL ] expr ) [OVER ( analytic_clause )]
GBase 替换:SUM([DISTINCT/ALL] expr) OVER([PARTITION BY …] [ORDER BY … [ASC/DESC] ]
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT SUM(salary) "Total" FROM employees; | SELECT SUM(salary) "Total" FROM employees; |
结果 | 691400 | 691400 |
1.1.3.15. VAR_POP
(Variance Population)该函数返回非空集合的总体变量(忽略null),VAR_POP进行如下计算:
(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / COUNT(expr)
语法:VAR_POP ( expr ) [OVER ( analytic_clause )]
GBase 替换:VARIANCE ,VAR_POP ( expr )。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT VAR_POP(salary) FROM employees; | SELECT VAR_POP(salary) FROM employees; |
结果 | 15140307.4504324 | 15140307.450432 |
1.1.3.16. VAR_SAMP
(Variance Sample)该函数返回非空集合的样本变量(忽略null),VAR_ SAMP进行如下计算:
(SUM(expr*expr)-SUM(expr)*SUM(expr)/COUNT(expr))/(COUNT(expr)-1)。
语法:VAR_SAMP ( expr ) [OVER ( analytic_clause )]
GBase 替换:VAR_ SAMP ( expr ) 。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT VAR_SAMP(salary) FROM employees; | SELECT VAR_ SAMP (salary) FROM employees; |
结果 | 15283140.5395874 | 15283140.539587 |
1.1.3.17. VARIANCE
该函数返回非空集合的样本变量,GREENPLUM计算该变量如下:如果表达式中行数为1,则返回0,如果表达式中行数大于1,则返回VAR_SAMP
语法:
VARIANCE ( [ DISTINCT | ALL ] expr ) [OVER ( analytic_clause )]
GBase 替换:VAR_ SAMP ( expr ) 。
示例:
数据库 | GREENPLUM | GBase |
语句 | SELECT VARIANCE(salary) FROM employees; | SELECT VARIANCE(salary) FROM employees; |
结果 | 15283140.5395874 | 15283140.539587 |
1.1.4. 字符串函数
1.1.4.1. ASCII(string-expr)
返回字符串表达式中第一个字节的整数ASCII 值,如果字符串为空,则 ASCII 返回零。文字字符串必须用引号引起来。使用 integer-expression 的值作为 n,从其余参数的列表中返回第 n 个参数(从1 开始)。虽然表达式可以是任意数据类型,但它们必须属于相同的数据类型。整数表达式必须是从1 到列表中的表达式数目,否则返回NULL。多个表达式之间用逗号分隔。
GBase 替代:ASCII(str)
1.1.4.2. bit_length(string)
返回字符串 str 的比特长度,以比特进行计算。
GBase 替代:BIT_LENGTH(str)
1.1.4.3. BTRIM(string text [, characters text])
从string开头和结尾删除只包含 characters中字符(缺省是空白)的最长字符串。
GBase 替代:TRIM(str)
1.1.4.4. CHR(integer-expr)
返回含数字所表示的ASCII 值的字符,将会返回与所提供的数值表达式模256 相对应的当前数据库字符集中的字符。对于值大于255 或小于0 的整数表达式,CHAR 返回NULL。
GBase 替代:CHAR(N,...)
1.1.4.5. CHAR_LENGTH(string-expr)
返回字符串中的字符数。返回的长度中包括尾随空格字符。NULL 字符串的返回值为NULL。如果字符串在多字节字符集中,则 CHAR_LENGTH 值可能会小于BYTE_LENGTH 值。
GBase 替代:CHAR_LENGTH(str),CHARACTER_LENGTH(str)
1.1.4.6. CONVERT(string bytea, src_encoding name, dest_encoding name)
把原来编码为src_encoding的字符串转换为 dest_encoding编码。 在这种编码格式中string必须是有效的。 用CREATE CONVERSION定义转换。
1.1.4.7. DECODE(value,value1,result1, value2,result2,value3,result3,... , result)
把用string表示的文本里面的二进制数据解码。
GBase 替代:DECODE
1.1.4.8. ENCODE(data bytea, format text)
把二进制数据编码为文本表示。支持的格式有:base64, hex, escape。escape 转换零字节和高位设置字节为八进制序列(\nnn) 和双反斜杠。
GBase 替代:ENCODE
1.1.4.9. INITCAP(string)
把每个单词的第一个字母转为大写,其它的保留小写。 单词是一系列字母数字组成的字符,用非字母数字分隔。
1.1.4.10. LENGTH(string-expr)
返回指定字符串中的字符数,如果字符串包含多字节字符,并且使用了适当的归类,则 LENGTH 返回字符数而不是字节数。如果字符串是 BINARY 数据类型,则 LENGTH 函数的行为与 BYTE_LENGTH 的行为相同。LENGTH 函数与 CHAR_LENGTH 函数相同。
GBase 替代: LENGTH(str),返回字符串 str 的长度,以字节进行计算
1.1.4.11. LOWER(string-expr)
将字符串中的所有字符转换成小写形式。
GBase 替代:LOWER(str),LCASE()
1.1.4.12. LPAD(string text, length int [, fill text])
通过填充字符fill(缺省时为空白), 把string填充为length长度。 如果string已经比length长则将其尾部截断。
GBase 替代:lpad
1.1.4.13. LTRIM(string text [, characters text])
从字符串string的开头删除只包含characters 中字符(缺省是一个空白)的最长的字符串。
GBase 替代:ltrim,但是他只能去掉空格,而不能去掉指定的字符。
1.1.4.14. MD5(string)
计算string的MD5散列,以十六进制返回结果。
GBase 替代:MD5
1.1.4.15. octet_length(string)
返回字符串 str 的长度,以字节进行计算。
GBase 替代:length
1.1.4.16. overlay(string placing string from int [for int])
把字符串string里的指定位置的内容替换成给定字符串
1.1.4.17. pg_client_encoding()
当前客户端编码名称
1.1.4.18. position(substring in string)
指定子字符串的位置
GBase 替代:instr
1.1.4.19. quote_ident(string text)
返回适用于SQL语句的标识符形式(使用适当的引号进行界定)。 只有在必要的时候才会添加引号(字符串包含非标识符字符或者会转换大小写的字符)。 嵌入的引号被恰当地写了双份。
1.1.4.20. quote_literal(string text)
返回适用于在SQL语句里当作文本使用的形式(使用适当的引号进行界定)。 嵌入的引号和反斜杠被恰当地写了双份。请注意,当输入是null时, quote_literal返回null;如果参数可能为null, 通常quote_nullable更适用。
1.1.4.21. quote_literal(value anyelement)
将给定的值强制转换为text,加上引号作为文本。嵌入的引号和反斜杠被恰当地写了双份。
1.1.4.22. regexp_matches(string text, pattern text [, flags text])
返回string中所有匹配POSIX正则表达式的子字符串。
GBase 替代:regexp
1.1.4.23. regexp_replace(string text, pattern text, replacement text [, flags text])
替换匹配 POSIX 正则表达式的子字符串。
GBase 替代:regexp
1.1.4.24. regexp_split_to_array(string text, pattern text [, flags text ])
用POSIX正则表达式作为分隔符,分隔string。
GBase 替代:regexp
1.1.4.25. regexp_split_to_table('hello world', E'\\s+')
用POSIX正则表达式作为分隔符,分隔string。
GBase 替代:regexp
1.1.4.26. repeat(string text, number int)
将string重复number次
GBase 替代:repeat
1.1.4.27. replace(string text, from text, to text)
把字符串string里出现地所有子字符串from 替换成子字符串to
GBase 替代:replace
1.1.4.28. rpad(string text, length int [, fill text])
使用填充字符fill(缺省时为空白), 把string填充到length长度。 如果string已经比length长则将其从尾部截断。
GBase 替代:rpad
1.1.4.29. rpad(string text, length int [, fill text])
使用填充字符fill(缺省时为空白), 把string填充到length长度。 如果string已经比length长则将其从尾部截断。
GBase 替代:rpad
1.1.4.30. rtrim(string text [, characters text])
从字符串string的结尾删除只包含 characters中字符(缺省是个空白)的最长的字符串。
GBase 替代:rtrim
1.1.4.31. split_part(string text, delimiter text, field int)
根据delimiter分隔string 返回生成的第 field 个子字符串(1为基)。
1.1.4.32. string || string,string || non-string 或 non-string || string
连接两个字符串或带有一个非字符串输入的字符串连接
GBase 替代:concat
1.1.4.33. strpos(string, substring)
指定的子字符串的位置。
GBase 替代:instr
1.1.4.34. substr(string, from [, count])
抽取子字符串。和substring(string from from for count))一样
GBase 替代:substr
1.1.4.35. SUBSTRING(string-expr, integer-expr[, integer-expr])
返回字符串的子字符串,如果指定了 length,则子字符串不应超过该长度。如果未指定长度,则从 start 位置开始返回字符串的其余部分。start 和 length 都可以是负数。使用适当的负数和正数组合,可以从字符串的开始处或结束处获取子字符串。
GBase 替代:SUBSTRING(str,pos),SUBSTRING(str FROM pos)
SUBSTRING(str,pos,len),SUBSTRING(str FROM pos FOR len)
1.1.4.36. to_ascii(string text [, encoding text])
把string从其它编码转换为ASCII (仅支持LATIN1, LATIN2, LATIN9, WIN1250编码)
GBase 替代:ascii
1.1.4.37. to_hex(number int or bigint)
把number转换成十六进制表现形式
GBase 替代:hex
1.1.4.38. translate(string text, from text, to text)
把在string中包含的任何匹配from 中字符的字符转化为对应的在to中的字符。 如果from比to长, 删掉在from中出现的额外的字符。
GBase 替代:translate
1.1.4.39. TRIM(string-expr)
删除字符串中的前导和尾随空白。
GBase 替代:TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
TRIM((remstr FROM) str)
1.1.4.40. UPPER(string-expr)
将字符串中的所有字符转换成大写形式。结果数据类型为 LONG VARCHAR。
GBase 替代: UPPER(str)