函数和操作符
GBase 8c提供了大量的函数和操作符,用户也可以自己定义函数和操作符。
逻辑操作符
常用的逻辑操作符:
AND
OR
NOT
比较操作符
操作符 |
描述 |
< |
小于 |
> |
大于 |
<= |
小于等于 |
>= |
大于等于 |
= |
等于 |
<> or != |
不等于 |
下表展示了所有GBase 8c可用的数学操作符:
操作符 |
描述 |
例子 |
结果 |
+ |
加 |
2 + 3 |
5 |
- |
减 |
2 - 3 |
-1 |
* |
乘 |
2 * 3 |
6 |
/ |
除(整数除法截断结果) |
4 / 2 |
2 |
% |
模(取余) |
5 % 4 |
1 |
^ |
指数 |
2.0 ^ 3.0 |
8 |
|/ |
平方根 |
|/ 25.0 |
5 |
||/ |
立方根 |
||/ 27.0 |
3 |
! |
阶乘 |
5 ! |
120 |
!! |
阶乘(前缀操作符) |
!! 5 |
120 |
@ |
绝对值 |
@ -5.0 |
5 |
& |
按位与 |
91 & 15 |
11 |
| |
按位或 |
32 | 3 |
35 |
# |
按位异或 |
17 # 5 |
20 |
~ |
按位求反 |
~1 |
-2 |
<< |
按位左移 |
1 << 4 |
16 |
>> |
按位右移 |
8 >> 2 |
2 |
可用的数学函数如下表:
函数 |
返回类型 |
描述 |
例子 |
结果 |
abs(x) |
(和输入相同) |
绝对值 |
abs(-17.4) |
17.4 |
cbrt(dp) |
dp |
立方根 |
cbrt(27.0) |
3 |
ceil(dp or numeric) |
(和输入相同) |
不小于参数的最小整数 |
ceil(-42.8) |
-42 |
ceiling(dp or numeric) |
(和输入相同) |
不小于参数的最小整数(ceil的别名) |
ceiling(-95.3) |
-95 |
degrees(dp) |
dp |
把弧度转为角度 |
degrees(0.5) |
28.6478897565412 |
div(y numeric, x numeric) |
numeric |
y/x的整数商 |
div(9,4) |
2 |
exp(dp or numeric) |
(和输入相同) |
指数 |
exp(1.0) |
2.71828182845905 |
floor(dp or numeric) |
(和输入相同) |
不大于参数的最大整数 |
floor(-42.8) |
-43 |
ln(dp or numeric) |
(和输入相同) |
自然对数 |
ln(2.0) |
0.693147180559945 |
log(dp or numeric) |
(和输入相同) |
以10为底的对数 |
log(100.0) |
2 |
log(b numeric, x numeric) |
numeric |
以b为底的对数 |
log(2.0, 64.0) |
6.0000000000 |
mod(y, x) |
(和参数类型相同) |
y/x的余数 |
mod(9,4) |
1 |
pi() |
dp |
“π”常数 |
pi() |
3.14159265358979 |
power(a dp, b dp) |
dp |
求a的b次幂 |
power(9.0, 3.0) |
729 |
power(a numeric, b numeric) |
numeric |
求a的b次幂 |
power(9.0, 3.0) |
729 |
radians(dp) |
dp |
把角度转为弧度 |
radians(45.0) |
0.785398163397448 |
round(dp or numeric) |
(和输入相同) |
圆整为最接近的整数 |
round(42.4) |
42 |
round(v numeric, s int) |
numeric |
圆整为s位小数数字 |
round(42.4382, 2) |
42.44 |
scale(numeric) |
integer |
参数的精度(小数点后的位数) |
scale(8.41) |
2 |
sign(dp or numeric) |
(和输入相同) |
参数的符号(-1, 0, +1) |
sign(-8.4) |
-1 |
sqrt(dp or numeric) |
(和输入相同) |
平方根 |
sqrt(2.0) |
1.4142135623731 |
trunc(dp or numeric) |
(和输入相同) |
截断(向零靠近) |
trunc(42.8) |
42 |
trunc(v numeric, s int) |
numeric |
截断为s位小数位置的数字 |
trunc(42.4382, 2) |
42.43 |
width_bucket(operand dp, b1 dp, b2 dp, count int) |
int |
返回一个桶,这个桶是在一个有count个桶, 上界为b1,下界为b2的柱图中operand将被赋予的那个桶。为外部范围输入返回0或者count+1 |
width_bucket(5.35, 0.024, 10.06, 5) |
3 |
width_bucket(operand numeric, b1 numeric, b2 numeric, count int) |
int |
返回一个桶,这个桶是在一个有count个桶,上界为b1,下界为b2的柱图中operand将被赋予的那个桶; 为范围外的输入返回0或者count+1 |
width_bucket(5.35, 0.024, 10.06, 5) |
3 |
width_bucket(operand anyelement, thresholds anyarray) |
int |
返回一个桶,它是给定数组列出桶的下限operand将被赋予的那个桶, 为了输入低于第一下界返回0;thresholds数组必须被存储, 首先最小值,或者获取意想不到的结果 |
width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[]) |
2 |
表中dp表示double precision。除非特殊指明,任何函数都返回和它参数相同的数据类型。
GBase 8c数据库产生随机数的函数如下:
函数 |
返回类型 |
描述 |
random() |
dp |
范围 0.0 <= x < 1.0 中的随机值 |
setseed(dp) |
void |
为后续的random()调用设置种子(值为于 -1.0 和 1.0 之间,包括边界值) |
三角函数如下:
函数 (弧度) |
函数 (角度) |
描述 |
acos(x) |
acosd(x) |
反余弦 |
asin(x) |
asind(x) |
反正弦 |
atan(x) |
atand(x) |
反正切 |
atan2(y, x) |
atan2d(y, x) |
y/x的反正切 |
cos(x) |
cosd(x) |
余弦 |
cot(x) |
cotd(x) |
余切 |
sin(x) |
sind(x) |
正弦 |
tan(x) |
tand(x) |
正切 |
SQL定义的字符串函数,使用关键字而不是逗号来分隔参数,如下表所示:
函数 |
返回类型 |
描述 |
例子 |
结果 |
|
|
串接 |
|
|
|
|
使用一个非字符串输入的串接 |
|
|
|
|
串中的位数 |
|
|
|
|
串中字符数 |
|
|
|
|
将字符串转换为小写形式 |
|
|
|
|
串中的字节数 |
|
|
|
|
替换子串 |
|
|
|
|
定位指定子串 |
|
|
|
|
提取子串 |
|
|
|
|
提取匹配POSIX正则表达式的子串。 |
|
|
|
|
提取匹配SQL正则表达式的子串。 |
|
|
|
|
从 |
|
|
|
|
|
|
|
|
|
将字符串转换成大写形式 |
|
|
其他字符串函数:
函数 |
返回类型 |
描述 |
例子 |
结果 |
|
|
参数第一个字符的ASCII代码。对于UTF8返回该字符的Unicode代码点。对于其他多字节编码,该参数必须是一个ASCII字符。 |
|
|
|
|
从 |
|
|
|
|
给定代码的字符。对于UTF8该参数被视作一个Unicode代码点。对于其他多字节编码该参数必须指定一个ASCII字符。NULL (0) 字符不被允许,因为文本数据类型不能存储这种字节。 |
|
|
|
|
串接所有参数的文本表示。NULL 参数被忽略。 |
|
|
|
|
将除了第一个参数外的其他参数用分隔符串接在一起。第一个参数被用作分隔符字符串。NULL 参数被忽略。 |
|
|
|
|
将字符串转换为 |
|
用Latin-1编码(ISO 8859-1) 表示的 |
|
|
将字符串转换为数据库编码。原始编码由 |
|
用当前数据库编码表示的 |
|
|
将字符串转换为 |
|
用UTF8编码表达的 |
|
|
从 |
|
|
|
|
将二进制数据编码成一个文本表达。支持的格式有: |
|
|
|
|
根据一个格式字符串格式化参数。该函数和C函数 |
|
|
|
|
将每一个词的第一个字母转换为大写形式并把剩下的字母转换为小写形式。词是由非字母数字字符分隔的字母数字字符的序列。 |
|
|
|
|
返回字符串中的前 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
将 |
|
|
|
|
从 |
|
|
|
|
计算 |
|
|
|
|
把 |
|
|
|
|
当前的客户端编码名字 |
|
|
|
|
将给定字符串返回成合适的引用形式,使它可以在一个SQL语句字符串中被用作一个标识符。只有需要时才会加上引号(即,如果字符串包含非标识符字符或可能是大小写折叠的)。嵌入的引号会被正确地双写。 |
|
|
|
|
将给定字符串返回成合适的引用形式,使它可以在一个SQL语句字符串中被用作一个字符串文字。嵌入的引号会被正确地双写。注意 |
|
|
|
|
强迫给定值为文本并且接着将它用引号包围作为一个文本。嵌入的单引号和反斜线被正确的双写。 |
|
|
|
|
将给定字符串返回成合适的引用形式,使它可以在一个SQL语句字符串中被用作一个字符串文字;或者,如果参数为空,返回 |
|
|
|
|
强迫给定值为文本并且接着将它用引号包围作为一个文本;或者,如果参数为空,返回 |
|
|
|
|
将从POSIX正则表达式首次匹配产生的捕获子字符串返回给 |
|
|
|
|
将从POSIX正则表达式匹配产生的捕获子字符串返回给 |
|
(2 rows) |
|
|
替换匹配一个POSIX正则表达式的子串。 |
|
|
|
|
使用一个POSIX正则表达式作为分隔符划分 |
|
|
|
|
使用一个POSIX正则表达式作为分隔符划分 |
|
(2 rows) |
|
|
重复 |
|
|
|
|
将 |
|
|
|
|
返回反转的字符串。 |
|
|
|
|
返回字符串中的最后 |
|
|
|
|
将 |
|
|
|
|
从 |
|
|
|
|
按 |
|
|
|
|
指定子串的位置(和 |
|
|
|
|
提取子串(与 |
|
|
|
|
将 |
|
|
|
|
将 |
|
|
|
|
|
|
函数format用于将字段的显示进行格式化。类似于C函数sprintf。语法:
format(formatstr text [, formatarg "any" [, ...] ])
formatstr指定了结果将被如何格式化。格式字符串中的文本,除格式说明符外,都将被直接复制到结果中。格式说明符定义了后续的函数参数将如何被格式化及插入到结果中。格式说明符由一个%字符开始,其语法表示为:
%[position][flags][width]type
其中:
下面为一些基本的格式转换的例子:
SELECT format('Hello %s', 'World');
结果:Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three');
结果:Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly');
结果:INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', E'C:\\Program Files');
结果:INSERT INTO locations VALUES(E'C:\\Program Files')
使用width和-标志的例子:
SELECT format('|%10s|', 'foo');
结果:| foo|
SELECT format('|%-10s|', 'foo');
结果:|foo |
SELECT format('|%*s|', 10, 'foo');
结果:| foo|
SELECT format('|%*s|', -10, 'foo');
结果:|foo |