8.278. RADIANS

用法:

radians(dp)

功能:

radians(dp)把角度dp转为弧度。

例子:

SELECT radians(45.0);

8.279. RADIUS

用法:

radius(circle)

功能:

radius(circle)求取输入圆circle的半径。

例子:

SELECT radius(circle'((0,0),2.0)');

8.280. RANGE_MERGE

用法:

range_merge(anyrange,anyrange)

功能:

range_merge(anyrange,anyrange)返回包含两个给定范围的最小范围。

例子:

SELECT range_merge('[1,2)'::int4range,'[3,4)'::int4range);

8.281. RANK

用法:

聚合语法:

rank(args) WITHIN GROUP (ORDER BY sorted_args)

分析语法:

rank() OVER ([query_partition_clause] order_by_clause)

功能:

RANK计算一个值在一组值中的排名。返回类型是NUMBER.

  • 具有相同排名标准值的行获得相同的排名。然后,KingBase数据库将绑定行数添加到绑定排名以计算下一个排名。因此,排名可能不是连续的数字。此功能对于前 N 和后 N 报告很有用。

  • 作为聚合函数,RANK计算由函数的参数标识的假设行相对于给定排序规范的排名。函数的参数必须全部计算为每个聚合组中的常量表达式,因为它们标识每个组中的单个行。常量参数表达式和ORDER BY聚合子句中的表达式按位置匹配。因此,参数的数量必须相同,并且它们的类型必须兼容。

  • 作为一个分析函数,RANK根据order_by_clause字句中的value_exprs的值,计算查询返回的每一行相对于查询返回的其他行的排名。

例子:

以下查询返回 15,500 美元工资在员工工资中的排名:

SELECT RANK(15500) WITHIN GROUP (ORDER BY salary DESC) "Rank of 15500" FROM employees;

以下为rank()用例:

CREATE TABLE ranks( c VARCHAR(10)); INSERT INTO ranks(c) VALUES ('A'),('B'),('C'),('B'),('E'); SELECT c, RANK() OVER(ORDER BY c) RANK_NUM FROM ranks;

8.282. RANDOM

用法:

random()

功能:

生成范围 0.0 <= x < 1.0 中的随机值

例子:

SELECT random();

8.283. RATIO_TO_REPORT

用法:

ratio_to_report(expr1) over (query_partions_clasue)

输入参数:

expr1:用于计算百分比的分子的表达式。

输出:

返回expr点over窗口的百分比的值。

功能:

百分比计算函数。分子是expr的值,分母是over中的值,若over中没有指定,则分母是所有值。 expr可以是常量表达式,算术表达式,投影列表达式。且表达式expr是一个number类型或者可以隐式转换为number类型的表达式。其它类型的表达式报错。 如果expr的计算结果为NULL,则RATIO_TO_REPORT函数的计算结果也为NULL。若指定 了 query_partions_clasue,则分母是这个子句计算的值。 不能使用ratio_to_report自身或者其它windows函数作为expr参数来使用,否则报错处理。返回值类型numeric,使用默认精度与标度。

例子:

select name, score, ratio_to_report(score) over(partition by name) from t1 order by name;
name | score |    ratio_to_report
------+-------+------------------------
joy  |  93.5 | 0.48774126238914971309
joy  |  98.2 | 0.51225873761085028691
lily |  86.2 | 0.47493112947658402204
lily |  95.3 | 0.52506887052341597796
lucy |  98.2 | 0.50102040816326530612
lucy |  97.8 | 0.49897959183673469388
tom  |  91.6 | 0.48723404255319148936
tom  |  96.4 | 0.51276595744680851064
Tony |  86.2 | 1.00000000000000000000
Tony |       |
(10 rows)

8.284. REGEXP_LIKE

用法:

regexp_like( source, pattern [,match_param])

功能:

regexp_like函数判断输入字符串能否通过正则表达式进行匹配,source为输入源字符串,pattern为正则表达式,match_param可以改变匹配规则,其参数如下: i:大小写不敏感 c:大小写敏感 m:和n是一样的,加上‘m’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 n:“n”敏感,加上‘n’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 x:忽略空格字符。默认情况下,空格字符会匹配空格字符。

例子:

select regexp_like('Steven', '^Ste(v|ph)en$');

8.285. REGEXP_MATCH

用法:

regexp_match( source, pattern [,match_param])

功能:

regexp_match函数返回一个POSIX正则表达式与source的第一个匹配得到的子串。source为输入源字符串,pattern为正则表达式,match_param可以改变匹配规则,其参数如下: i:大小写不敏感 c:大小写敏感 m:和n是一样的,加上‘m’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 n:“n”敏感,加上‘n’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 x:忽略空格字符。默认情况下,空格字符会匹配空格字符。

例子:

select regexp_match('foobarbequebaz','ba.', 'i');

8.286. REGEXP_MATCHES

用法:

regexp_match( source, pattern [,match_param])

功能:

regexp_matches函数返回一个POSIX正则表达式与source的匹配得到的子串(可能有多个)。source为输入源字符串,pattern为正则表达式,match_param可以改变匹配规则,其参数如下: i:大小写不敏感 c:大小写敏感 m:和n是一样的,加上‘m’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 n:“n”敏感,加上‘n’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 x:忽略空格字符。默认情况下,空格字符会匹配空格字符。

例子:

select regexp_matches('foobarbequebaz','ba.', 'g');

8.287. REGEXP_REPLACE

用法:

regexp_replace(source, pattern, replacement [, match_param])

功能:

regexp_replace函数替换匹配一个POSIX正则表达式的子串。 source为输入源字符串,pattern为正则表达式,replacement是用来替换的字符串, match_param可以改变匹配规则,其参数如下: i:大小写不敏感 c:大小写敏感 m:和n是一样的,加上‘m’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 n:“n”敏感,加上‘n’后,“.”与“n”不匹配;插入符号( ^)和美元符号($)分别解释为源字符串中任何位置的任何行的开头和结尾,而不仅仅是整个源字符串的开头或结尾。 x:忽略空格字符。默认情况下,空格字符会匹配空格字符。

例子:

select regexp_replace('Thomas', '.[mN]a.', 'M');

8.288. REGEXP_SPLIT_TO_ARRAY

用法:

regexp_split_to_array(source, pattern, [, match_param])

功能:

regexp_split_to_array函数使用一个POSIX正则表达式作为分隔符划分source来生成数组。 source为输入源字符串,pattern为正则表达式, match_param可以改变匹配规则。

例子:

select regexp_split_to_array('hello world', '\s+');

8.289. REGEXP_SPLIT_TO_TABLE

用法:

regexp_split_to_table(source, pattern, [, match_param])

功能:

regexp_split_to_table函数使用一个POSIX正则表达式作为分隔符划分source来生成表格。 source为输入源字符串,pattern为正则表达式, match_param可以改变匹配规则。

例子:

select regexp_split_to_table('hello world', '\s+');

8.290. REPEAT

用法:

repeat(string text, number int)

功能:

函数返回将给定的字符串重复给定的次数后,得到的新字符串。

例子:

以下示例将给定字符串重复3遍:

SELECT REPEAT('abc', 3) "REPEAT" FROM DUAL; +-----------+ | REPEAT | +===========+ | abcabcabc | +-----------+

8.291. REPLACE

用法:

replace(string text, from text, to text)

功能:

REPLACEchar每次出现search_string替换为 时返回replacement_string。如果replacement_string省略或为 null,则search_string删除所有出现的 。如果search_string为空,则char返回。

search_string和replacement_string, 以及,都char可以是任何数据类型CHAR, VARCHAR, NCHAR, NVARCHAR, CLOB, 或NCLOB。返回的字符串与 的字符集相同char。VARCHAR如果第一个参数不是 LOB,则函数返回,如果第一个参数是 LOB,则返回CLOB。

REPLACE提供与该功能提供的功能相关的TRANSLATE功能。TRANSLATE提供单字符的一对一替换。REPLACE允许您用一个字符串替换另一个字符串以及删除字符串。

例子:

以下示例替换出现的Jwith BL:

SELECT REPLACE('JACK and JUE','J','BL') "Changes" FROM DUAL;

+----------------+
| Changes        |
+================+
| BLACK and BLUE |
+----------------+

8.292. REVERSE

用法:

reverse(str)

功能:

函数返回将指定字符串反转后的新字符串。

例子:

SELECT REVERSE('ABCDEF') "Changes" FROM DUAL;

+----------------+
| Changes        |
+================+
| FEDCBA         |
+----------------+

8.293. RIGHT

用法:

reverse(str)

功能:

获取给定字符串的从右向左数给定位数的子字符串

例子:

select right('abcde',2);
+-----------+
| right     |
+===========+
| de        |
+-----------+

8.294. ROUND

用法:

round(date) round({dp|numeric}) round(v numeric, s int)

功能:

  1. 参数为时间时

ROUND返回date四舍五入到格式模型指定的单位fmt。NLS_CALENDAR该函数对会话参数不敏感。它按照公历的规则运作。返回的值始终是数据类型DATE,即使您为 指定了不同的日期时间数据类型date。如果省略fmt,则date四舍五入到最近的一天。date表达式必须解析为一个DATE值 。

也可以看看:“ ROUND 和 TRUNC 日期函数”用于允许的格式模型在fmt

  1. 参数为数字时

ROUND返回n四舍五入到integer小数点右边的位置。如果省略integer,则将n四舍五入到零位。如果integer为负数,则n舍入到小数点左侧。

n可以是任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型。如果省略integer,则函数返回与ROUND的数值数据类型相同的数据类型的值 (n, 0) n。如果包含integer,则函数返回NUMBER。

ROUND使用以下规则实现:

  • 如果n为 0,则ROUND始终返回 0,而不管integer.

  • 如果n是负数,则ROUND(n, integer) 返回 - ROUND(-n, integer)。

  • 如果n是正数,那么ROUND(n, integer) = FLOOR(n * POWER(10, integer) + 0.5) * POWER(10, -integer)

  • ROUND应用于一个值可能与应用于以浮点表示的相同值的NUMBER结果略有不同。ROUND不同的结果源于NUMBER浮点值的内部表示的差异。如果出现差异,差异将在四舍五入的数字中为 1。

也可以看看:

“浮点数”了解有关 KingBase 数据库如何处理BINARY_FLOAT和BINARY_DOUBLE取值 的更多信息

FLOOR和CEIL、TRUNC (number)和MOD获取有关执行相关操作的功能的信息

例子:

以下示例将日期舍入到下一年的第一天:

SELECT ROUND (TO_DATE ('27-OCT-00'),'YEAR') "New Year" FROM DUAL;

+-----------+
| New Year  |
+===========+
| 01-JAN-01 |
+-----------+

以下示例将数字四舍五入到小数点后一位:

SELECT ROUND(15.193,1) "Round" FROM DUAL;

+-------+
| Round |
+=======+
| 15.2  |
+-------+

以下示例将数字四舍五入到小数点左侧:

SELECT ROUND(15.193,-1) "Round" FROM DUAL;

+-------+
| Round |
+=======+
| 20    |
+-------+

8.295. ROW_NUMBER

用法:

row_number() over([query_partition_clause,] order_by_clause)

功能:

ROW_NUMBER是解析函数,用于为结果集中的每一行分配一个唯一的整数值,从1开始计数。

ROW_NUMBER通过在检索ROW_NUMBER指定范围的值的查询中嵌套子查询,您可以从内部查询的结果中找到精确的行子集。该函数的这种使用使您可以实现 top-N、bottom-N 和 inner-N 报告。为了获得一致的结果,查询必须确保确定的排序顺序。

例子:

以下示例在hr.employees表中查找每个部门中薪酬最高的三名员工。对于少于三名员工的部门,返回少于三行。

SELECT department_id, first_name, last_name, salary FROM ( SELECT department_id, first_name, last_name, salary, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary desc) rn FROM employees ) WHERE rn <= 3 ORDER BY department_id, salary DESC, last_name;

8.296. ROW_TO_JSON

用法:

row_to_json(record [, pretty_bool])

功能:

把行作为一个 JSON对象返回。如果pretty_bool为真,将在第1层元素之间增加换行。

例子:

select row_to_json(row(1,'foo'));

8.297. RPAD

用法:

rpad(string text, length int [, fill text])

功能:

RPAD返回expr1,用 右填充长度n字符expr2,根据需要复制多次。此函数对于格式化查询的输出很有用。

两者expr1和expr2都可以是任何数据类型CHAR、VARCHAR、NCHAR、NVARCHAR、CLOB或NCLOB。VARCHAR如果expr1是字符数据类型,NVARCHAR如果expr1是国家字符数据类型,则返回的字符串是数据类型,如果是expr1LOB 数据类型,则返回 LOB。返回的字符串与 的字符集相同expr1。参数n必须是NUMBER整数或可以隐式转换为NUMBER整数的值。

expr1不能为空。如果不指定expr2,则默认为一个空白。如果expr1长于n,则此函数返回expr1适合的部分n。

参数n是显示在终端屏幕上的返回值的总长度。在大多数字符集中,这也是返回值中的字符数。但是,在某些多字节字符集中,字符串的显示长度可能与字符串中的字符数不同。

例子:

以下示例通过用星号填充单个空格来创建一个简单的工资金额图表:

SELECT last_name, RPAD(' ', salary/1000/1, '*') "Salary" FROM employees WHERE department_id = 80 ORDER BY last_name, "Salary";

+-----------+-------------+
| LAST_NAME | Salary      |
+===========+=============+
| Abel      | **********  |
+-----------+-------------+
| Ande      | *****       |
+-----------+-------------+
| Banda     | *****       |
+-----------+-------------+
| Bates     | ******      |
+-----------+-------------+
| Bernstein | ********    |
+-----------+-------------+
| Bloom     | *********   |
+-----------+-------------+
| Cambrault | **********  |
+-----------+-------------+
| Cambrault | ******      |
+-----------+-------------+
| Doran     | ******      |
+-----------+-------------+
| Errazuriz | *********** |
+-----------+-------------+
| Fox       | ********    |
+-----------+-------------+
| Greene    | ********    |
+-----------+-------------+
| Hall      | ********    |
+-----------+-------------+
| Hutton    | *******     |
+-----------+-------------+
| Johnson   | *****       |
+-----------+-------------+
| King      | *********   |
+-----------+-------------+
| . . .     |             |
+-----------+-------------+

8.298. RTRIM

用法:

rtrim(string text [, characters text])

功能:

RTRIMchar从 .中出现的所有字符的右端删除set。此函数对于格式化查询的输出很有用。

如果不指定set,则默认为一个空白。RTRIM工作原理与LTRIM.

两者char和set都可以是任何数据类型CHAR、VARCHAR、NCHAR、NVARCHAR、CLOB或NCLOB。VARCHAR如果char是字符数据类型,NVARCHAR如果char是国家字符数据类型,则返回的字符串是数据类型,如果是charLOB 数据类型,则返回 LOB。

例子:

以下示例从字符串 中删除所有最右边出现的小于号 ( <)、大于号 ( >) 和等号 ( ):=

SELECT RTRIM('<=====>BROWNING<=====>', '<>=') "RTRIM Example" FROM DUAL;

+-----------------+
| RTRIM Example   |
+=================+
| <=====>BROWNING |
+-----------------+