下面列举了AntDB常用的一些函数。
数学函数
下面是AntDB中提供的数学函数列表,需要说明的是,这些函数中有许多都存在多种形式,区别只是参数类型不同。除非特别指明,任何特定形式的函数都返回和它的参数相同的数据类型。
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|
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 |
log10(dp or numeric) | (和输入相同) | 以10为底的对数 | log10(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(op dp, b1 dp, b2 dp, count int) | int | 返回一个桶号,这个桶是在一个柱状图中operand将被分配的那个桶,该柱状图有count个散布在范围b1到b2上的等宽桶。对于超过该范围的输入,将返回0或者count+1 | width_bucket(5.35, 0.024, 10.06, 5) | 3 |
width_bucket(op numeric, b1 numeric, b2 numeric, count int) | int | 返回一个桶号,这个桶是在一个柱状图中operand将被分配的那个桶,该柱状图有count个散布在范围b1到b2上的等宽桶。对于超过该范围的输入,将返回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 |
随机函数
函数 | 返回类型 | 描述 |
---|
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) | 正切 |
双曲函数
函数 | 描述 | 举例 | 结果 |
---|
sinh(x) | 双曲正弦 | sinh(0) | 0 |
cosh(x) | 双曲余弦 | cosh(0) | 1 |
tanh(x) | 双曲切线 | tanh(0) | 0 |
asinh(x) | 反双曲正弦 | asinh(0) | 0 |
acosh(x) | 反双曲余弦 | acosh(1) | 0 |
atanh(x) | 反双曲切线 | atanh(0) | 0 |
字符串函数
下面是 AntDB 中提供的字符串操作符列表:
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|
string 丨丨 string | text | 字串连接 | 'Post' 丨丨 'greSQL' | PostgreSQL |
bit_length(string) | int | 字串里二进制位的个数 | bit_length('jose') | 32 |
char_length(string) | int | 字串中的字符个数 | char_length('jose') | 4 |
convert(string using conversion_name) | text | 使用指定的转换名字改变编码。 | convert('PostgreSQL' using iso_8859_1_to_utf8) | 'PostgreSQL' |
lower(string) | text | 把字串转化为小写 | lower('TOM') | tom |
octet_length(string) | int | 字串中的字节数 | octet_length('jose') | 4 |
overlay(string placing string from int [for int]) | text | 替换子字串 | overlay('Txxxxas' placing 'hom' from 2 for 4) | Thomas |
position(substring in string) | int | 指定的子字串的位置 | position('om' in 'Thomas') | 3 |
substring(string [from int] [for int]) | text | 抽取子字串 | substring('Thomas' from 2 for 3) | hom |
substring(string from pattern) | text | 抽取匹配 POSIX 正则表达式的子字串 | substring('Thomas' from '…$') | mas |
substring(string from pattern for escape) | text | 抽取匹配SQL正则表达式的子字串 | substring('Thomas' from '%#"o_a#"_' for '#') | oma |
trim([leading丨trailing 丨 both] [characters] from string) | text | 从字串string的开头/结尾/两边/ 删除只包含characters(默认是一个空白)的最长的字串 | trim(both 'x' from 'xTomxx') | Tom |
upper(string) | text | 把字串转化为大写。 | upper('tom') | TOM |
ascii(text) | int | 参数第一个字符的ASCII码 | ascii('x') | 120 |
btrim(string text [, characters text]) | text | 从string开头和结尾删除只包含在characters里(默认是空白)的字符的最长字串 | btrim('xyxtrimyyx','xy') | trim |
chr(int) | text | 给出ASCII码的字符 | chr(65) | A |
convert(string text, [src_encoding name,] dest_encoding name) | text | 把字串转换为dest_encoding | convert( 'text_in_utf8', 'UTF8', 'LATIN1') | 以ISO 8859-1编码表示的text_in_utf8 |
initcap(text) | text | 把每个单词的第一个子母转为大写,其它的保留小写。单词是一系列字母数字组成的字符,用非字母数字分隔。 | initcap('hi thomas') | Hi Thomas |
length(string text) | int | string中字符的数目 | length('jose') | 4 |
lpad(string text, length int [, fill text]) | text | 通过填充字符fill(默认为空白),把string填充为长度length。 如果string已经比length长则将其截断(在右边)。 | lpad('hi', 5, 'xy') | xyxhi |
ltrim(string text [, characters text]) | text | 从字串string的开头删除只包含characters(默认是一个空白)的最长的字串。 | ltrim('zzzytrim','xyz') | trim |
md5(string text) | text | 计算给出string的MD5散列,以十六进制返回结果。 | md5('abc') | |
repeat(string text, number int) | text | 重复string number次。 | repeat('Pg', 4) | PgPgPgPg |
replace(string text, from text, to text) | text | 把字串string里出现地所有子字串from替换成子字串to。 | replace('abcdefabcdef', 'cd', 'XX') | abXXefabXXef |
rpad(string text, length int [, fill text]) | text | 通过填充字符fill(默认为空白),把string填充为长度length。如果string已经比length长则将其截断。 | rpad('hi', 5, 'xy') | hixyx |
rtrim(string text [, character text]) | text | 从字串string的结尾删除只包含character(默认是个空白)的最长的字 | rtrim('trimxxxx','x') | trim |
split_part(string text, delimiter text, field int) | text | 根据delimiter分隔string返回生成的第field个子字串(1 Base)。 | split_part('abc~@~def~@~ghi', '~@~', 2) | def |
strpos(string, substring) | text | 声明的子字串的位置。 | strpos('high','ig') | 2 |
substr(string, from [, count]) | text | 抽取子字串。 | substr('alphabet', 3, 2) | ph |
to_ascii(text [, encoding]) | text | 把text从其它编码转换为ASCII。 | to_ascii('Karel') | Karel |
to_hex(number int/bigint) | text | 把number转换成其对应地十六进制表现形式。 | to_hex(9223372036854775807) | 7fffffffffffffff |
translate(string text, from text, to text) | text | 把在string中包含的任何匹配from中的字符的字符转化为对应的在to中的字符。 | translate('12345', '14', 'ax') | a23x5 |
数据类型格式化函数
函数 | 返回类型 | 描述 | 例子 |
---|
to_char(timestamp, text) | text | 把时间戳转成字符串 | to_char(current_timestamp, 'HH12:MI:SS') |
to_char(interval, text) | text | 把间隔转成字符串 | to_char(interval '15h 2m 12s', 'HH24:MI:SS') |
to_char(int, text) | text | 把整数转成字符串 | to_char(125, '999') |
to_char(double precision, text) | text | 把实数或双精度转成字符串 | to_char(125.8::real, '999D9') |
to_char(numeric, text) | text | 把数字转成字符串 | to_char(-125.8, '999D99S') |
to_date(text, text) | date | 把字符串转成日期 | to_date('05 Dec 2000', 'DD Mon YYYY') |
to_number(text, text) | numeric | 把字符串转成数字 | to_number('12,454.8-', '99G999D9S') |
to_timestamp(text, text) | timestamp with time zone | 把字符串转成时间戳 | to_timestamp('05 Dec 2000', 'DD Mon YYYY') |
日期/时间函数
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|
age(timestamp, timestamp) | interval | 减去参数,生成一个使用年、月(而不是只用日)的“符号化”的结果 | age(timestamp '2001-04-10', timestamp '1957-06-13') | 43 年 9 月 27 日 |
age(timestamp) | interval | 从current_date(在午夜)减去 | age(timestamp '1957-06-13') | 43 years 8 mons 3 days |
clock_timestamp() | timestamp with time zone | 当前日期和时间(在语句执行期间变化) | | |
current_date | date | 当前日期 | | |
current_time | time with time zone | 当前时间(一天中的时间) | | |
current_timestamp | timestamp with time zone | 当前日期和时间(当前事务开始时) | | |
date_part(text, timestamp) | double precision | 获得子域(等价于extract) | date_part('hour', timestamp '2001-02-16 20:38:40') | 20 |
date_part(text, interval) | double precision | 获得子域(等价于extract) | date_part('month', interval '2 years 3 months') | 3 |
date_trunc(text, timestamp) | timestamp | 截断到指定精度 | date_trunc('hour', timestamp '2001-02-16 20:38:40') | 2001-02-16 20:00:00 |
date_trunc(text, timestamp with time zone, text) | timestamp with time zone | 在指定的时区截断到指定的精度 | date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney') | 2001-02-16 13:00:00+00 |
date_trunc(text, interval) | interval | 截断到指定精度 | date_trunc('hour', interval '2 days 3 hours 40 minutes') | 2 days 03:00:00 |
extract(field from timestamp) | double precision | 获得子域 | extract(hour from timestamp '2001-02-16 20:38:40') | 20 |
extract(field from interval) | double precision | 获得子域 | extract(month from interval '2 years 3 months') | 3 |
isfinite(date) | boolean | 测试有限日期(不是+/-无限) | isfinite(date '2001-02-16') | true |
isfinite(timestamp) | boolean | 测试有限时间戳(不是+/-无限) | isfinite(timestamp '2001-02-16 21:28:30') | true |
isfinite(interval) | boolean | 测试有限间隔 | isfinite(interval '4 hours') | true |
justify_days(interval) | interval | 调整间隔这样30天时间周期可以表示为月 | justify_days(interval '35 days') | 1 mon 5 days |
justify_hours(interval) | interval | 调整间隔这样24小时时间周期可以表示为日 | justify_hours(interval '27 hours') | 1 day 03:00:00 |
justify_interval(interval) | interval | 使用justify_days和justify_hours调整间隔,使用额外的符号调整 | justify_interval(interval '1 mon -1 hour') | 29 days 23:00:00 |
localtime | time | 当前时间(一天中的时间) | | |
localtimestamp | timestamp | 当前日期和时间(当前事务的开始) | | |
make_date(year int, month int, day int) | date | 从年、月、日域创建日期 | make_date(2013, 7, 15) | 2013-07-15 |
make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0) | interval | 从年、月、周、日、时、分、秒域创建 interval | make_interval(days => 10) | 10 days |
make_time(hour int, min int, sec double precision) | time | 从时、分、秒域创建时间 | make_time(8, 15, 23.5) | 08:15:23.5 |
make_timestamp(year int, month int, day int, hour int, min int, sec double precision) | timestamp | 从年、月、日、时、分、秒域创建时间戳 | make_timestamp(2013, 7, 15, 8, 15, 23.5) | 2013-07-15 08:15:23.5 |
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ]) | timestamp with time zone | 从年、月、日、时、分、秒域创建带时区的时间戳。如果没有指定timezone, 则使用当前时区。 | make_timestamptz(2013, 7, 15, 8, 15, 23.5) | 2013-07-15 08:15:23.5+01 |
now() | timestamp with time zone | 当前日期和时间(当前事务的开始) | | |
statement_timestamp() | timestamp with time zone | 当前日期和时间(当前语句的开始) | | |
timeofday() | text | 当前日期和时间(clock_timestamp,但是作为一个text字符串) | | |
transaction_timestamp() | timestamp with time zone | 当前日期和时间(当前事务的开始) | | |
to_timestamp(double precision) | timestamp with time zone | 把 Unix 时间(从 1970-01-01 00:00:00+00 开始的秒)转换成 timestamp | to_timestamp(1284352323) | 2010-09-13 04:32:03+0 |
网络地址函数
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|
abbrev(inet) | text | 缩写显示格式文本 | abbrev(inet '10.1.0.0/16') | 10.1.0.0/16 |
abbrev(cidr) | text | 缩写显示格式文本 | abbrev(cidr '10.1.0.0/16') | 10.1/16 |
broadcast(inet) | inet | 网络广播地址 | broadcast('192.168.1.5/24') | 192.168.1.255/24 |
family(inet) | int | 抽取地址族;4为 IPv4, 6为 IPv6 | family('::1') | 6 |
host(inet) | text | 抽取 IP 地址为文本 | host('192.168.1.5/24') | 192.168.1.5 |
hostmask(inet) | inet | 为网络构造主机掩码 | hostmask('192.168.23.20/30') | 0.0.0.3 |
masklen(inet) | int | 抽取网络掩码长度 | masklen('192.168.1.5/24') | 24 |
netmask(inet) | inet | 为网络构造网络掩码 | netmask('192.168.1.5/24') | 255.255.255.0 |
network(inet) | cidr | 抽取地址的网络部分 | network('192.168.1.5/24') | 192.168.1.0/24 |
set_masklen(inet, int) | inet | 为inet值设置网络掩码长度 | set_masklen('192.168.1.5/24', 16) | 192.168.1.5/16 |
set_masklen(cidr, int) | cidr | 为cidr值设置网络掩码长度 | set_masklen('192.168.1.0/24'::cidr, 16) | 192.168.0.0/16 |
text(inet) | text | 抽取 IP 地址和网络掩码长度为文本 | text(inet '192.168.1.5') | 192.168.1.5/32 |
inet_same_family(inet, inet) | boolean | 地址是来自于同一个家族吗? | inet_same_family('192.168.1.5/24', '::1') | FALSE |
inet_merge(inet, inet) | cidr | 包括给定网络的最小网络 | inet_merge('192.168.1.5/24', '192.168.2.5/24') | 192.168.0.0/22 |
文本搜索函数
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|
array_to_tsvector(text[]) | tsvector | 把词位数组转换成tsvector | array_to_tsvector('{fat,cat,rat}'::text[]) | 'cat' 'fat' 'rat' |
get_current_ts_config() | regconfig | 获得默认文本搜索配置 | get_current_ts_config() | english |
length(tsvector) | integer | tsvector中的词位数 | length('fat:2,4 cat:3 rat:5A'::tsvector) | 3 |
numnode(tsquery) | integer | tsquery中词位外加操作符的数目 | numnode('(fat & rat) | cat'::tsquery) | 5 |
plainto_tsquery([ config regconfig , ] query text) | tsquery | 产生tsquery但忽略标点符号 | plainto_tsquery('english', 'The Fat Rats') | 'fat' & 'rat' |
phraseto_tsquery([ config regconfig , ] query text) | tsquery | 产生忽略标点搜索短语的tsquery | phraseto_tsquery('english', 'The Fat Rats') | 'fat' <-> 'rat' |
websearch_to_tsquery([ config regconfig , ] query text) | tsquery | 从一个Web搜索风格的查询产生tsquery | websearch_to_tsquery('english', '"fat rat" or rat') | 'fat' <-> 'rat' | 'rat' |
querytree(query tsquery) | text | 获得一个tsquery的可索引部分 | querytree('foo & ! bar'::tsquery) | 'foo' |
setweight(vector tsvector, weight "char") | tsvector | 为vector的每一个元素分配权重 | setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A') | 'cat':3A 'fat':2A,4A 'rat':5A |
setweight(vector tsvector, weight "char", lexemes text[]) | tsvector | 为lexemes中列出的vector的元素分配权重 | setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A', '{cat,rat}') | 'cat':3A 'fat':2,4 'rat':5A |
strip(tsvector) | tsvector | 从tsvector中移除位置和权重 | strip('fat:2,4 cat:3 rat:5A'::tsvector) | 'cat' 'fat' 'rat' |
to_tsquery([ config regconfig , ] query text) | tsquery | 规范化词并转换成tsquery | to_tsquery('english', 'The & Fat & Rats') | 'fat' & 'rat' |
to_tsvector([ config regconfig , ] document text) | tsvector | 缩减文档文本成tsvector | to_tsvector('english', 'The Fat Rats') | 'fat':2 'rat':3 |
to_tsvector([ config regconfig , ] document json(b)) | tsvector | 把该文档中的每个字符串值缩减成一个tsvector,然后将它们按在文档中的顺序串接起来形成一个tsvector | to_tsvector('english', '{"a": "The Fat Rats"}'::json) | 'fat':2 'rat':3 |
json(b)_to_tsvector([ config regconfig, ] document json(b), filter json(b)) | tsvector | 把filter指定的文档中的每个值缩减为一个tsvector,然后把它们按照文档中的顺序串接起来形成一个tsvector。filter是一个jsonb数组,它列举哪些种类的元素需要被包括在结果tsvector中。 | json_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::json, '["string", "numeric"]') | '123':5 'fat':2 'rat':3 |
ts_delete(vector tsvector, lexeme text) | tsvector | 从vector中移除给定的lexeme | ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, 'fat') | 'cat':3 'rat':5A |
ts_delete(vector tsvector, lexemes text[]) | tsvector | 从vector中移除lexemes中词位的任何出现 | ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, ARRAY['fat','rat']) | 'cat':3 |
ts_filter(vector tsvector, weights "char"[]) | tsvector | 从vector中只选择带有给定权重的元素 | ts_filter('fat:2,4 cat:3b rat:5A'::tsvector, '{a,b}') | 'cat':3B 'rat':5A |
ts_headline([ config regconfig, ] document text, query tsquery [, options text ]) | text | 显示一个查询匹配 | ts_headline('x y z', 'z'::tsquery) | x y z |
ts_headline([ config regconfig, ] document json(b), query tsquery [, options text ]) | text | 显示一个查询匹配 | ts_headline('{"a":"x y z"}'::json, 'z'::tsquery) | {"a":"x y z"} |
ts_rank([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) | float4 | 为查询排名文档 | ts_rank(textsearch, query) | 0.818 |
ts_rank_cd([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) | float4 | 使用覆盖密度为查询排名文档 | ts_rank_cd('{0.1, 0.2, 0.4, 1.0}', textsearch, query) | 2.01317 |
ts_rewrite(query tsquery, target tsquery, substitute tsquery) | tsquery | 在查询内用substitute替换target | ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery) | 'b' & ( 'foo' | 'bar' ) |
ts_rewrite(query tsquery, select text) | tsquery | 使用来自一个SELECT的目标和替换者进行替换 | SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases') | 'b' & ( 'foo' | 'bar' ) |
tsquery_phrase(query1 tsquery, query2 tsquery) | tsquery | 制造搜索后面跟着query2的query1的查询(和<->操作符相同) | tsquery_phrase(to_tsquery('fat'), to_tsquery('cat')) | 'fat' <-> 'cat' |
tsquery_phrase(query1 tsquery, query2 tsquery, distance integer) | tsquery | 制造查询来搜索在query1后面最大距离distance上跟着query2 的情况 | tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10) | 'fat' <10> 'cat' |
tsvector_to_array(tsvector) | text[] | 把tsvector转换为词位数组 | tsvector_to_array('fat:2,4 cat:3 rat:5A'::tsvector) | {cat,fat,rat} |
tsvector_update_trigger() | trigger | 用于自动tsvector列更新的触发器函数 | CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body) | |
tsvector_update_trigger_column() | trigger | 用于自动tsvector列更新的触发器函数 | CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, configcol, title, body) | |
unnest(tsvector, OUT lexeme text, OUT positions smallint[], OUT weights text) | setof record | 把一个 tsvector 扩展成一组行 | unnest('fat:2,4 cat:3 rat:5A'::tsvector) | (cat,{3},{D}) ... |
JSON函数
下表为JSON 创建函数:
函数 | 描述 | 例子 | 例子结果 |
---|
to_json(anyelement) to_jsonb(anyelement) | 把该值返回为json或者jsonb。数组和组合 会被(递归)转换成数组和对象;对于不是数组和组合的值,如果有 从该类型到json的造型,造型函数将被用来执行该 转换;否则将产生一个标量值。对于任何不是数字、布尔、空值的标 量类型,将使用文本表达,在这种风格下它是一个合法的 json或者jsonb值。 | to_json('Fred said "Hi."'::text) | "Fred said "Hi."" |
array_to_json(anyarray [, pretty_bool]) | 把数组作为一个 JSON 数组返回。一个 SQL 多维数组会成为一个数组 的 JSON 数组。如果pretty_bool为真,将在 第 1 维度的元素之间增加换行。 | array_to_json('{{1,5},{99,100}}'::int[]) | [[1,5],[99,100]] |
row_to_json(record [, pretty_bool]) | 把行作为一个 JSON 对象返回。如果pretty_bool为真,将在第1层元素之间增加换行。 | row_to_json(row(1,'foo')) | {"f1":1,"f2":"foo"} |
json_build_array(VARIADIC "any") jsonb_build_array(VARIADIC "any") | 从一个可变参数列表构造一个可能包含异质类型的 JSON 数组。 | json_build_array(1,2,'3',4,5) | [1, 2, "3", 4, 5] |
json_build_object(VARIADIC "any") jsonb_build_object(VARIADIC "any") | 从一个可变参数列表构造一个 JSON 对象。通过转换,该参数列表由交替 出现的键和值构成。 | json_build_object('foo',1,'bar',2) | {"foo": 1, "bar": 2} |
json_object(text[]) jsonb_object(text[]) | 从一个文本数组构造一个 JSON 对象。该数组必须可以是具有偶数个成员的 一维数组(成员被当做交替出现的键/值对),或者是一个二维数组(每一个 内部数组刚好有 2 个元素,可以被看做是键/值对)。 | json_object('{a, 1, b, "def", c, 3.5}')````````json_object('{{a, 1},{b, "def"},{c, 3.5}}') | {"a": "1", "b": "def", "c": "3.5"} |
json_object(keys text[], values text[])````````jsonb_object(keys text[], values text[]) | json_object的这种形式从两个独立的数组得到键/值对。在其 他方面和一个参数的形式相同。 | json_object('{a, b}', '{1,2}') | {"a": "1", "b": "2"} |
数组函数
函数 | 返回类型 | 描述 |
---|
array_append(anyarray, anyelement) | anyarray | 向一个数组的末端追加一个元素 |
array_cat(anyarray, anyarray) | anyarray | 连接两个数组 |
array_ndims(anyarray) | int | 返回数组的维度数 |
array_dims(anyarray) | text | 返回数组的维度的文本表示 |
array_fill(anyelement, int[], [, int[]]) | anyarray | 返回一个用提供的值和维度初始化好的数组,可以选择下界不为 1 |
array_length(anyarray, int) | int | 返回被请求的数组维度的长度 |
array_lower(anyarray, int) | int | 返回被请求的数组维度的下界 |
array_position(anyarray, anyelement [, int]) | int | 返回在该数组中从第三个参数指定的元素开始或者 第一个元素开始(数组必须是一维的)、第二个参数的 第一次出现的下标 |
array_positions(anyarray, anyelement) | int[] | 返回在第一个参数给定的数组(数组必须是一维的)中, 第二个参数所有出现位置的下标组成的数组 |
array_prepend(anyelement, anyarray) | anyarray | 向一个数组的首部追加一个元素 |
array_remove(anyarray, anyelement) | anyarray | 从数组中移除所有等于给定值的所有元素(数组必须是一维的) |
array_replace(anyarray, anyelement, anyelement) | anyarray | 将每一个等于给定值的数组元素替换成一个新值 |
array_to_string(anyarray, text [, text]) | text | 使用提供的定界符和可选的空串连接数组元素 |
array_upper(anyarray, int) | int | 返回被请求的数组维度的上界 |
cardinality(anyarray) | int | 返回数组中元素的总数,如果数组为空则返回 0 |
string_to_array(text, text [, text]) | text[] | 使用提供的定界符和可选的空串将字符串划分成数组元素 |
unnest(anyarray) | setof anyelement | 将一个数组扩展成一组行 |
unnest(anyarray, anyarray [, ...]) | setof anyelement, anyelement [, ...] | [把多维数组(可能是不同类型)扩展成一个行的集合。 |
示例
antdb=# select array_append(ARRAY[1,2], 3); array_append-------------- {1,2,3}(1 row)antdb=# select array_cat(ARRAY[1,2,3], ARRAY[4,5]); array_cat------------- {1,2,3,4,5}(1 row)antdb=# select array_ndims(ARRAY[[1,2,3], [4,5,6]]); array_ndims------------- 2(1 row)antdb=# select array_dims(ARRAY[[1,2,3], [4,5,6]]); array_dims------------ [1:2][1:3](1 row)antdb=# select array_fill(7, ARRAY[3], ARRAY[2]); array_fill--------------- [2:4]={7,7,7}(1 row)antdb=# select array_length(array[1,2,3], 1); array_length-------------- 3(1 row)antdb=# select array_lower('[0:2]={1,2,3}'::int[], 1); array_lower------------- 0(1 row)antdb=# select array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon'); array_position---------------- 2(1 row)antdb=# select array_positions(ARRAY['A','A','B','A'], 'A'); array_positions----------------- {1,2,4}(1 row)antdb=# select array_prepend(1, ARRAY[2,3]); array_prepend--------------- {1,2,3}(1 row)antdb=# select array_remove(ARRAY[1,2,3,2], 2); array_remove-------------- {1,3}(1 row)antdb=# select array_replace(ARRAY[1,2,5,4], 5, 3); array_replace--------------- {1,2,3,4}(1 row)antdb=# select array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*'); array_to_string----------------- 1,2,3,*,5(1 row)antdb=# select array_upper(ARRAY[1,8,3,7], 1); array_upper------------- 4(1 row)antdb=# select cardinality(ARRAY[[1,2],[3,4]]); cardinality------------- 4(1 row)antdb=# select string_to_array('xx~^~yy~^~zz', '~^~', 'yy'); string_to_array----------------- {xx,NULL,zz}(1 row)antdb=# select unnest(ARRAY[1,2]); unnest-------- 1 2(2 rows)
范围函数
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|
lower(anyrange) | 范围的元素类型 | 范围的下界 | lower(numrange(1.1,2.2)) | 1.1 |
upper(anyrange) | 范围的元素类型 | 范围的上界 | upper(numrange(1.1,2.2)) | 2.2 |
isempty(anyrange) | boolean | 范围为空? | isempty(numrange(1.1,2.2)) | FALSE |
lower_inc(anyrange) | boolean | 下界包含在内? | lower_inc(numrange(1.1,2.2)) | TRUE |
upper_inc(anyrange) | boolean | 上界包含在内? | upper_inc(numrange(1.1,2.2)) | FALSE |
lower_inf(anyrange) | boolean | 下界无限? | lower_inf('(,)'::daterange) | TRUE |
upper_inf(anyrange) | boolean | 上界无限? | upper_inf('(,)'::daterange) | TRUE |
range_merge(anyrange, anyrange) | anyrange | 包含两个给定范围的最小范围 | range_merge('[1,2)'::int4range, '[3,4)'::int4range) | [1,4) |
聚集函数
函数 | 参数类型 | 返回类型 | 部分模式 | 描述 |
---|
array_agg(expression) | 任何非数组类型 | 参数类型的数组 | No | 输入值(包括空)被连接到一个数组 |
array_agg(expression) | 任意数组类型 | 和参数数据类型相同 | No | 输入数组被串接到一个更高维度的数组中 (输入必须都具有相同的维度并且不能为空或者 NULL) |
avg(expression) | smallint, int, bigint、real、double precision、numeric或interval | 对于任何整数类型参数是numeric,对于一个浮点参数是double precision,否则和参数数据类型相同 | Yes | 所有非空输入值的平均值(算术平均) |
bit_and(expression) | smallint、int、bigint或bit | 与参数数据类型相同 | Yes | 所有非空输入值的按位与,如果没有非空值则结果是空值 |
bit_or(expression) | smallint, int, bigint, or bit | 与参数数据类型相同 | Yes | 所有非空输入值的按位或,如果没有非空值则结果是空值 |
bool_and(expression) | bool | bool | Yes | 如果所有输入值为真则结果为真,否则为假 |
bool_or(expression) | bool | bool | Yes | 至少一个输入值为真时结果为真,否则为假 |
count(*) | | bigint | Yes | 输入的行数 |
count(expression) | any | bigint | Yes | expression值非空的输入行的数目 |
every(expression) | bool | bool | Yes | 等价于bool_and |
json_agg(expression) | any | json | No | 将值,包含空值,聚集成一个 JSON 数组 |
jsonb_agg(expression) | any | jsonb | No | 把值,包含空值,聚合成一个 JSON 数组 |
json_object_agg(name, value) | (any, any) | json | No | 将名字/值对聚集成一个 JSON 对象,值可以为空,但不能是名字。 |
jsonb_object_agg(name, value) | (any, any) | jsonb | No | 把名字/值对聚合成一个 JSON 对象,值可以为空,但不能是名字。 |
max(expression) | 任意数组、数字、串、日期/时间、网络或者枚举类型,或者这些类型的数组 | 与参数数据类型相同 | Yes | 所有非空输入值中expression的最大值 |
min(expression) | 任意数组、数字、串、日期/时间、网络或者枚举类型,或者这些类型的数组 | 与参数数据类型相同 | Yes | 所有非空输入值中expression的最小值 |
string_agg(expression, delimiter) | (text, text) 或 (bytea, bytea) | 与参数数据类型相同 | No | 非空输入值连接成一个串,用定界符分隔 |
sum(expression) | smallint、int、 bigint、real、double precision、numeric、 interval或money | 对smallint或int参数是bigint,对bigint参数是numeric,否则和参数数据类型相同 | Yes | 所有非空输入值的expression的和 |
xmlagg(expression) | xml | xml | No | 连接 非空XML 值 |