SQL函数笔记
一、聚合函数——返回汇总值
-
AVG(表达式) 返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。
-
COUNT(表达式) 返回表达式中非NULL值的数量。可用于数字和字符列。
-
COUNT(*) 返回表中的行数(包括有NULL值的列)。
-
MAX(表达式) 返回表达式中的最大值,忽略NULL值。可用于数字、字符和日期时间列。
-
MIN(表达式) 返回表达式中的最小值,忽略NULL值。可用于数字、字符和日期时间列。
-
SUM(表达式) 返回表达式中所有的总和,忽略NULL值。仅用于数字列。
二、转换函数——转换数据类型
- CONVERT(data_type[(length)], expression [, style])
select convert(varchar(10) ,stuno) as stuno,stuname from student
CAST( expression AS data_type )
select cast(stuno as varchar(10)) as stuno,stuname from student
Cast和Convert的区别
Cast 和Convert都是用来将一种数据类型的表达式转换为另一种数据类型的表达式。CAST 和 CONVERT 提供相似的功能,只是语法不同。在时间转化中一般用到convert,因为它比cast多加了一个style,可以转化成不同时间的格式。
三、日期函数——处理日期和时间
名称 | 描述 |
---|
ADDDATE() | 增加日期 |
ADDTIME() | 增加时间 |
CONVERT_TZ() | 将当前时区更改为另一时区 |
CURDATE() | 返回当前日期 |
CURRENT_DATE(), CURRENT_DATE | CURDATE() 的别名 |
CURRENT_TIME(), CURRENT_TIME | CURTIME() 的别名 |
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP | NOW() 的别名 |
CURTIME() | 返回当前时间 |
DATE_ADD() | 将两个日期相加 |
DATE_FORMAT() | 按照指定格式格式化日期 |
DATE_SUB() | 将两个日期相减 |
DATE() | 从 date 或者 datetime 表达式中提取出日期部分 |
DATEDIFF() | 将两个日期相减 |
DAY() | DAYOFMONTH() 的别名 |
DAYNAME() | 返回某天在用星期中的名称 |
DAYOFMONTH() | 返回某天是当月的第几天 (1-31) |
DAYOFWEEK() | 返回某天是该星期的第几天 |
DAYOFYEAR() | 返回某天是一年中的第几天(1-366) |
EXTRACT | 提取日期中的某一部分 |
FROM_DAYS() | 将天数转换为日期 |
FROM_UNIXTIME() | 将某个日期格式化为 UNIX 时间戳 |
HOUR() | 提取小时 |
LAST_DAY | 返回参数日期所在月份的最后一天 |
LOCALTIME(), LOCALTIME | NOW() 的别名 |
LOCALTIMESTAMP, LOCALTIMESTAMP() | NOW() 的别名 |
MAKEDATE() | 利用年份和某天在该年所处的天数来创建日期 |
MAKETIME | MAKETIME() |
MICROSECOND() | 由参数返回微秒 |
MINUTE() | 由参数返回分钟 |
MONTH() | 返回日期参数的月份 |
MONTHNAME() | 返回月份的名字 |
NOW() | 返回当前日期和时间 |
PERIOD_ADD() | 向年月格式的日期数据之间添加一段时间 |
PERIOD_DIFF() | 返回两个年月格式的日期数据之间的月份数 |
QUARTER() | 返回日期参数所在的季度 |
SEC_TO_TIME() | 将秒数转换为 ‘HH:MM:SS’ 格式 |
SECOND() | 返回参数中的秒数 (0-59) |
STR_TO_DATE() | 将字符串转换为日期数据 |
SUBDATE() | 以三个参数调用的时候是 DATE_SUB() 的同义词 |
SUBTIME() | 减去时间 |
SYSDATE() | 返回函数执行的时的时刻 |
TIME_FORMAT() | 格式化时间 |
TIME_TO_SEC() | 将时间参数转换为秒数 |
TIME() | 返回参数表达式中的时间部分 |
TIMEDIFF() | 将两个时间相减 |
TIMESTAMP() | 只有一个参数时,该函数返回 date 或者 datetime 表达式。当有两个参数时,将两个参数相加。 |
TIMESTAMPADD() | 在 datetime 表达式上加上一段时间 |
TIMESTAMPDIFF() | 在 datetime 表达式上减去一段时间 |
TO_DAYS() | 将日期参数转换为天数 |
UNIX_TIMESTAMP() | 返回 UNIX 时间戳 |
UTC_DATE() | 返回当前 UTC 日期 |
UTC_TIME() | 返回当前 UTC 时间 |
UTC_TIMESTAMP() | 返回当前 UTC 日期和时间 |
WEEK() | 返回参数的星期数 |
WEEKDAY() | 返回日期参数时一个星期中的第几天 |
WEEKOFYEAR() | 返回日期参数是日历上的第几周 (1-53) |
YEAR() | 返回日期参数中的年份 |
YEARWEEK() | 返回年份和星期 |
-
NOW() 当前的系统日期
select now();
select CURTIME();
select CURDATE();
SELECT EXTRACT(YEAR FROM NOW());
SELECT EXTRACT(MONTH FROM NOW());
SELECT EXTRACT(DAY FROM NOW());
SELECT EXTRACT(HOUR FROM NOW());
SELECT EXTRACT(MINUTE FROM NOW());
SELECT EXTRACT(SECOND FROM NOW());
SELECT EXTRACT(YEAR FROM '2021-04-02 10:37:14.123456');
SELECT EXTRACT(MONTH FROM '2021-04-02 10:37:14.123456');
SELECT EXTRACT(DAY FROM '2021-04-02 10:37:14.123456');
SELECT EXTRACT(HOUR FROM '2021-04-02 10:37:14.123456');
SELECT EXTRACT(MINUTE FROM '2021-04-02 10:37:14.123456');
SELECT EXTRACT(SECOND FROM '2021-04-02 10:37:14.123456');
-
year()返回年份
select year(now())
3.日期加减
select date_sub(now(), INTERVAL 1 hour);
select date_add(now(), INTERVAL 1 day);
4.日期格式化、字符串转日期
SELECT NOW() FROM DUAL;
SELECT NOW();
SELECT CURRENT_TIMESTAMP();
SELECT CURRENT_TIMESTAMP;
SELECT LOCALTIME();
SELECT LOCALTIME;
SELECT LOCALTIMESTAMP();
SELECT LOCALTIMESTAMP;
SELECT SYSDATE();
SELECT NOW(), SLEEP(3), NOW();
SELECT SYSDATE(), SLEEP(3), SYSDATE();
SELECT CURDATE();
SELECT CURRENT_DATE();
SELECT CURRENT_DATE;
SELECT CURTIME();
SELECT CURRENT_TIME();
SELECT CURRENT_TIME;
SELECT UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME()
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP();
SET @dt = '2017-05-15 10:37:14.123456';
SELECT DATE(@dt);
SELECT TIME('2017-05-15 10:37:14.123456');
SELECT YEAR('2017-05-15 10:37:14.123456');
SELECT MONTH('2017-05-15 10:37:14.123456');
SELECT DAY('2017-05-15 10:37:14.123456');
SELECT HOUR('2017-05-15 10:37:14.123456');
SELECT MINUTE('2017-05-15 10:37:14.123456');
SELECT SECOND('2017-05-15 10:37:14.123456');
SELECT MICROSECOND('2017-05-15 10:37:14.123456');
SELECT QUARTER('2017-05-15 10:37:14.123456');
SELECT WEEK('2017-05-15 10:37:14.123456');
SELECT WEEK('2017-05-15 10:37:14.123456', 7);
SELECT WEEKOFYEAR('2017-05-15 10:37:14.123456');
SELECT DAYOFYEAR('2017-05-15 10:37:14.123456');
SELECT DAYOFMONTH('2017-05-15 10:37:14.123456');
SELECT DAYOFWEEK('2017-05-15 10:37:14.123456');
SELECT WEEKDAY('2017-05-15 10:37:14.123456');
SELECT WEEKDAY('2017-05-21 10:37:14.123456');
SELECT YEARWEEK('2017-05-15 10:37:14.123456');
SELECT EXTRACT(YEAR FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(MONTH FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(DAY FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(HOUR FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(MINUTE FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(SECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(MICROSECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(QUARTER FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(WEEK FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(YEAR_MONTH FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(DAY_HOUR FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(DAY_MINUTE FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(DAY_SECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(DAY_MICROSECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(HOUR_MINUTE FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(HOUR_SECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(HOUR_MICROSECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(MINUTE_SECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(MINUTE_MICROSECOND FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(SECOND_MICROSECOND FROM '2017-05-15 10:37:14.123456');
SELECT DAYNAME('2017-05-15 10:37:14.123456');
SELECT MONTHNAME('2017-05-15 10:37:14.123456');
SELECT LAST_DAY('2016-02-01');
SELECT LAST_DAY('2016-05-01');
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);
SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY);
SELECT DATE_SUB(CURDATE(),INTERVAL -1 DAY);
SELECT DATE_SUB(CURDATE(),INTERVAL 1 MONTH);
SELECT DATE_SUB(CURDATE(),INTERVAL -1 MONTH);
SELECT DATE_SUB(CURDATE(),INTERVAL 1 YEAR);
SELECT DATE_SUB(CURDATE(),INTERVAL -1 YEAR);
SELECT PERIOD_ADD(201705,2), PERIOD_ADD(201705,-2);
SELECT PERIOD_DIFF(201706, 201703);
SELECT DATEDIFF('2017-06-05','2017-05-29');
SELECT TIMEDIFF('2017-06-05 19:28:37', '2017-06-05 17:00:00');
SELECT TIME_TO_SEC('01:00:05');
SELECT SEC_TO_TIME(3605);
SELECT TO_DAYS('0000-00-00');
SELECT TO_DAYS('2017-06-05');
SELECT FROM_DAYS(0);
SELECT FROM_DAYS(736850);
SELECT STR_TO_DATE('06.05.2017 19:40:30', '%m.%d.%Y %H:%i:%s');
SELECT STR_TO_DATE('06/05/2017', '%m/%d/%Y');
SELECT STR_TO_DATE('2017/12/3','%Y/%m/%d')
SELECT STR_TO_DATE('20:09:30', '%h:%i:%s')
SELECT DATE_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H时%i分%s秒');
SELECT TIME_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H时%i分%s秒');
SELECT GET_FORMAT(DATE,'usa');
SELECT GET_FORMAT(DATE,'jis');
SELECT GET_FORMAT(DATE,'iso');
SELECT GET_FORMAT(DATE,'eur');
SELECT GET_FORMAT(DATE,'internal');
SELECT GET_FORMAT(DATETIME,'usa');
SELECT GET_FORMAT(DATETIME,'jis');
SELECT GET_FORMAT(DATETIME,'iso');
SELECT GET_FORMAT(DATETIME,'eur');
SELECT GET_FORMAT(DATETIME,'internal');
SELECT GET_FORMAT(TIME,'usa');
SELECT GET_FORMAT(TIME,'jis');
SELECT GET_FORMAT(TIME,'iso');
SELECT GET_FORMAT(TIME,'eur');
SELECT GET_FORMAT(TIME,'internal');
SELECT MAKEDATE(2017,31);
SELECT MAKEDATE(2017,32);
SELECT MAKETIME(19,52,35);
SELECT CONVERT_TZ('2017-06-05 19:54:12', '+08:00', '+00:00');
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP('2017-05-15');
SELECT UNIX_TIMESTAMP('2017-05-15 10:37:14');
SELECT FROM_UNIXTIME(1494815834);
SELECT FROM_UNIXTIME(1494815834, '%Y年%m月%d日 %h时%分:%s秒');
SELECT TIMESTAMP('2017-05-15');
SELECT TIMESTAMP('2017-05-15 08:12:25', '01:01:01');
SELECT DATE_ADD('2017-05-15 08:12:25', INTERVAL 1 DAY);
SELECT TIMESTAMPADD(DAY, 1, '2017-05-15 08:12:25');
SELECT TIMESTAMPDIFF(YEAR, '2017-06-01', '2016-05-15');
SELECT TIMESTAMPDIFF(MONTH, '2017-06-01', '2016-06-15');
SELECT TIMESTAMPDIFF(DAY, '2017-06-01', '2016-06-15');
SELECT TIMESTAMPDIFF(HOUR, '2017-06-01 08:12:25', '2016-06-15 00:00:00');
SELECT TIMESTAMPDIFF(MINUTE, '2017-06-01 08:12:25', '2016-06-15 00:00:00');
SELECT TIMESTAMPDIFF(SECOND, '2017-06-01 08:12:25', '2016-06-15 00:00:00');
四、数字函数——执行算数运算
-
函数名称 | 作 用 |
---|
ABS | 求绝对值 |
SQRT | 求二次方根 |
MOD | 求余数 |
CEIL 和 CEILING | 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整 |
FLOOR | 向下取整,返回值转化为一个BIGINT |
RAND | 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列 |
ROUND | 对所传参数进行四舍五入 |
SIGN | 返回参数的符号 |
POW 和 POWER | 两个函数的功能相同,都是所传参数的次方的结果值 |
SIN | 求正弦值 |
ASIN | 求反正弦值,与函数 SIN 互为反函数 |
COS | 求余弦值 |
ACOS | 求反余弦值,与函数 COS 互为反函数 |
TAN | 求正切值 |
ATAN | 求反正切值,与函数 TAN 互为反函数 |
COT | 求余切值 |
六、系统函数——从数据库返回在SQLSERVER中的值、对象或设置的特殊信息
函数 | 说明 |
---|
VERSION() | 获取数据库的版本号。 |
CONNECTION_ID() | 获取服务器的连接数。 |
DATABASE()、SCHEMA() | 获取当前数据库名。 |
USER()、SYSTEM_USER()、SESSION_USER() | 获取当前用户名。 |
CURRENT_USER()、CURRENT_USER | 获取当前用户名。 |
CHARSET(str) | 获取字符串str的字符集。 |
COLLATION(str) | 获取字符串str的字符排序方法。 |
LAST_INSERT_ID() | 获取最近生成的AUTO_INCREMENT值。 |
七、文本和图像函数——对文本和图像数据执行操作
函数 | 说明 |
---|
CHAR_LENGTH(str) | 计算字符串字符个数。 |
LENGTH(str) | 返回值为字符串str的长度,单位为字节。 |
CONCAT(s1,s2,…) | 返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个为NULL则返回值为NULL。 |
CONCAT_WS(x,s1,s2,…) | 返回多个字符串拼接之后的字符串,每个字符串之间有一个x。 |
INSERT(s1,x,len,s2) | 返回字符串s1,其子字符串起始于位置x,被字符串s2取代len个字符。 |
LOWER(str)、LCASE(str) | 将str中的字母全部转换成小写。 |
UPPER(str)、UCASE(str) | 将字符串中的字母全部转换成大写。 |
LEFT(s,n)、RIGHT(s,n) | 前者返回字符串s从最左边开始的n个字符,后者返回字符串s从最右边开始的n个字符。 |
LPAD(s1,len,s2)、RPAD(s1,len,s2) | 前者返回s1,其左边由字符串s2填补到len字符长度,假如s1的长度大于len,则返回值被缩短至len字符;前者返回s1,其右边由字符串s2填补到len字符长度,假如s1的长度大于len,则返回值被缩短至len字符。 |
LTRIM(s)、RTRIM(s) | 前者返回字符串s,其左边所有空格被删除;后者返回字符串s,其右边所有空格被删除。 |
TRIM(s) | 返回字符串s删除了两边空格之后的字符串。 |
TRIM(s1 FROM s) | 删除字符串s两端所有子字符串s1,未指定s1的情况下则默认删除空格。 |
REPEAT(s,n) | 返回一个由重复字符串s组成的字符串,字符串s的数目等于n。 |
SPACE(n) | 返回一个由n个空格组成的字符串。 |
REPLACE(s,s1,s2) | 返回一个字符串,用字符串s2替代字符串s中所有的字符串s1。 |
STRCMP(s1,s2) | 若s1和s2中所有的字符串都相同,则返回0;根据当前分类次序,第一个参数小于第二个则返回-1,其他情况返回1。 |
SUBSTRING(s,n,len)、MID(s,n,len) | 两个函数作用相同,从字符串s中返回一个第n个字符开始、长度为len的字符串。 |
LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1) | 三个函数作用相同,返回子字符串str1在字符串str中的开始位置(从第几个字符开始)。 |
REVERSE(s) | 将字符串s反转。 |
ELT(N,str1,str2,str3,str4,…) | 返回第N个字符串。 |
FIELD(s,s1,s2,…) | 返回第一个与字符串s匹配的字符串的位置。 |
FIND_IN_SET(s1,s2) | 返回在字符串s2中与s1匹配的字符串的位置。 |
MAKE_SET(x,s1,s2,…) | 按x的二进制数从s1,s2…,sn中选取字符串 |
附件:
八、字符串函数参考(PGSQL)
-
删除字符串
- PostgreSQL
btrim()
函数从一个字符的开头和结尾删除一个包含了由参数指定的所有字符(默认为空格)的最长的字符串 ltrim()
从一个字符串的开头删除指定的字符rtrim()
从一个字符串的结尾删除。
SELECT btrim('xxyHELLOzxy', 'xyz') AS "'xxyHELLOzxy'";
SELECT ltrim('xxyHELLOzxy', 'xyz') AS "'xxyHELLOzxy'";
SELECT rtrim('xxyHELLOzxy', 'xyz') AS "'xxyHELLOzxy'";
-
字符串长度
char_length() /character_length()/length():返回一个字符串中的字符数
select length('hello')
-
chr() 语法:返回一个 ASCII 值对应的字符
SELECT
chr(65) AS "chr(65)",
chr(97) AS "chr(97)";
-
拼接字符串
- concat() 语法:concat(param1[, param2] …)
- concat_ws() 语法:concat_ws(separator, param1[, param2] …)
- ||
select concat('a','b','c') as res;
select concat_ws(',','a','b','c') as res;
select '(' || concat('a','b','c') ||')' as res;
select '(' || concat_ws(',','a','b','c') ||')' as res;
-
format() 语法
- 单格式:format(format_str, [param1[, param2] …])
2.多格式:%[position][flags][width]type
-
position
可选的。 它用来指明要使用的哪一个参数。它采用 N$
这样的形式,其中 N
是一个数数字。N
从 1 开始,1 意味着 format_str
之后的第一个参数。如果不指定,默认是使用参数列表中的下一个参数。
-
flags
可选的。 与宽度选项搭配使用。目前仅支持一个符号:减号(-
),它表示输出左对齐。未指定宽度时,不起作用。
-
width
可选的。它用来设置此格式说明符输出的最少字符数。根据 flag
的设定,对输出进行左侧填充或右侧填充空格。如果指定的宽度小于参数的宽度,则不起任何作用。
这个参数可以使用下列中的任何一个:
- 一个正整数值
- 一个星号 (
*
) 使用下一个函数参数作为宽度 - 一个格式为
*n$
的字符串,用于使用第 n 个函数参数作为宽度。
-
type
必须的。 指定格式说明符的输出的类型。支持下列的类型:
s
将参数值的格式设置为简单字符串。空值被视为空字符串。I
将参数值视为 SQL 标识符,必要时对其进行双引号包围。值为 null 是错误的L
将参数值引起来作为 SQL 文本。空值显示为字符串 NULL
,不带引号
-
param1...
可选的。 格式字符串中的格式说明符引用的参数。如果参数多于格式说明符,则会忽略额外的参数。参数的数量是可变的,可能为零。
select format('hello %s','word')
SELECT format('This is %s, he is %s years old.', 'Tim', 20);
SELECT format('ABC顺序: %3$s, %2$s, %1$s', 'A', 'B', 'C');
-
指定字符串中提取最左侧的指定数量的字符并返回:left()
left() 语法:left()
语法
select left('hello',2)
select left('hello',-2)
-
填充指定的字符,使其达到指定的长度
- lpad() 语法:lpad(string, length, characters)
2.format()
函数:format(format_str, [param1[, param2] …])
3.rpad():
SELECT
lpad('123456', 10, '0') AS "lpad('1234', 10, '0')",
lpad('9876', 10, '0') AS "lpad('9876', 10, '0')";
SELECT lpad('hello',10,'xyz');
SELECT format('%10s','hello');
-
计算一个指定的字符串的 md5 哈希值,并返回计算结果的十六进制形式。
md5() 语法:md5(str)
select md5('hello');
-
在一个字符串中使用指定的文本替换从指定位置开始的指定数量的字符。
overlay() 语法:overlay(string PLACING replacement FROM start [FOR count])
select overlay('hello' placing 'm' from 4 for 1)
-
parse_ident() 语法:参数拆分成一个标识符的数组,同时删除单个标识符两端的引号
语法:parse_ident (qualified_identifier)或者parse_ident (qualified_identifier, strict_mode)
必需的。 文本类型。 一个合格的标识符。
可选的。 布尔类型。 是否启用严格模式。默认是 true
.
-
从一个字符串中返回指定的正则表达式的第一个匹配的结果
语法:regexp_match(string, regex[, flags]) → text[]
必需的。 一个字符串。
必需的。 正则表达式。
可选的。 正则表达式的匹配模式。
PostgreSQL regexp_match()
函数返回一个字符串数组,它是一个字符串中使用指定的正则表达式的第一次匹配结果。
regexp_match()
函数不能使用 g
标识,匹配所有结果用regexp_matches()
SELECT regexp_match('Abcd abCd aBcd', 'ab.', 'i');
SELECT regexp_match('Abcd abCd aBcd', 'ab.');
SELECT regexp_match('Abcd abCd aBcd', '(a.)(c.)', 'i');
-
regexp_matches()
函数:从一个字符串中返回指定的正则表达式的第一次匹配的结果;如果使用了 g
标识,则返回所有的匹配结果。
SELECT regexp_matches('Abcd abCd aBcd', '(a.)(c.)', 'ig');
SELECT regexp_match('Abcd abCd aBcd', '(a.)(c.)', 'i');
-
regexp_replace() 函数:一个给定字符串中用给定的内容替换给定的正则表达式的第一个匹配的子串;如果使用了 g
标识,则替换所有的匹配结果。
regexp_replace() 语法:regexp_replace(string, regex, replacement[, flags]) → text
必需的。 一个字符串。
必需的。 正则表达式。
必需的。 替换为的字符串。
可选的。 正则表达式的匹配模式。
SELECT regexp_replace('Abcd abCd aBcd', 'ab.', 'xx');
SELECT regexp_replace('Abcd abCd aBcd', 'ab.', 'xx','ig');
-
regexp_split_to_array() 函数:将一个指定的字符串按照通过 POSIX 正则表达式指定的分隔符拆分成数组并返回。
语法:regexp_split_to_array(string, regex[, flags]) → text[]
必需的。 一个要拆分的字符串。
必需的。 用作分隔符的正则表达式。
可选的。 正则表达式的匹配模式。
SELECT regexp_split_to_array('ab cd ef gh', '\s+');
SELECT regexp_split_to_array('a1,b1,c1', ',');
SELECT regexp_split_to_array('a1,b1,c1', '');
-
PostgreSQL regexp_split_to_table() 函数:将一个指定的字符串按照通过 POSIX 正则表达式指定的分隔符拆分成一个结果集并返回。
string
必需的。 一个要拆分的字符串。
regex
必需的。 用作分隔符的正则表达式。
flags
可选的。 正则表达式的匹配模式。
-
返回值
PostgreSQL regexp_split_to_table()
函数返回一个结果集,该集合中的元素就是字符串 string
按照正则表达式 regex
拆分的所有部分。
如果 regex
为 NULL
,此函数将返回 NULL
。
如果 regex
是一个空字符串,那么整个字符串中的所有字符都将成为结果集的成员。
如果 null_string
不为 NULL
,那么拆分后的数组中的与它匹配的成员将被替换为 NULL
。
SELECT regexp_split_to_table('ab cd ef gh', '\s+');
SELECT regexp_split_to_table('a1,b1,c1', ',');
SELECT regexp_split_to_table('a1,b1,c1', '');
-
repeat()
函数 : repeat()
语法:repeat(string, number)
参数:
-
string
必需的。 要重复的字符串。
-
number
必需的。 要重复的次数。
返回值:
PostgreSQL repeat()
函数返回一个重复了指定次数的字符串。
SELECT repeat('Hello', 3) AS "repeat('Hello', 3)";
-
replace()
函数:将一个指定的字符串中出现的所有指定的子字符串替换为新的子字符串并返回结果。
语法:replace(string, search_string, replacement)
参数:
-
string
必需的。 一个字符串。
-
search_string
必需的。 被替换的字符串
-
replacement
必需的。 替换为的字符串。
返回值:
PostgreSQL replace()
函数将字符串 string
中的所有的字符串 search_string
使用 replacement
替换,并返回结果
select replace('hello','e','m');
-
reverse()
函数:反转一个指定的字符串中的字符顺序并返回反转的字符串。
select reverse('hello');
-
split_part()
函数:将一个指定的字符串按照指定的分隔符拆分,并返回指定的部分。
语法:split_part(string, delimiter, n)
参数
返回值
PostgreSQL split_part()
函数将字符串 string
按照分隔符 delimiter
拆分,并返回第 n
个部分。如果 n
为负数,则返回倒数第 -n
个部分。
SELECT split_part('ab,cd,ef,gh', ',', 3);
-
substr()
函数:从一个指定的字符串中根据指定的起始位置和长度提取子字符串并返回。
substr()语法:substr(string, start[, length])
substr(string, start[, length])
等同于 substring(string FROM start[ FOR length])
。
参数
返回值
PostgreSQL substr()
函数函数从字符串 string
中提取从位置 start
开始且长度为 length
的子字符串并返回。若没有指定参数 length
,则提取从 start
开始到字符串 string
的结尾的子字符串。
如果 start + length
超过了字符串 string
的长度,则返回 start
到字符串的结尾 string
的子字符串。
若参数为 NULL
,该函数将返回 NULL
。
SELECT substr('hello world', 7) AS "substr('hello world', 7)";
SELECT substr('hello world', 7,2) AS "substr('hello world', 7)";
-
substring()
函数:从一个指定的字符串中根据指定的起始位置和长度提取子字符串,或者根据正则表达式提取子字符串
语法:substring(string [FROM start] [FOR length])或者substring(string FROM pattern)或者substring(string SIMILAR pattern ESCAPE escape)
参数:
-
string
必需的。 一个字符串。
-
start
可选的。 子字符串的起始位置。默认是 1,也就是字符串的开头。
-
length
可选的。 子字符串的长度。默认是提取到字符串的结尾。
-
pattern
必需的。 正则表达式。 FROM pattern
子句中使用的是 POSIX 正则表达式;SIMILAR pattern
子句中使用的是 SQL 正则表达式。
-
escape
必需的。 转义字符。
返回值:
PostgreSQL substring()
函数函数从字符串 string
中提取从位置 start
开始且长度为 length
的子字符串并返回。若没有指定参数 length
,则提取从 start
开始到字符串 string
的结尾的子字符串。
如果 start + length
超过了字符串 string
的长度,则返回 start
到字符串的结尾 string
的子字符串。
若参数为 NULL
,该函数将返回 NULL
。
SELECT
substring('hello' FROM 2) AS "第二个开始",
substring('hello' FROM 2 FOR 2) AS "第二个并且长度为2",
substring('hello' FOR 2) AS "长度为2)";
SELECT
substring('hello' FROM '^.{2}') AS "substring('hello' FROM '^.{2}')",
substring('hello' FROM '.{3}$') AS "substring('hello' FROM '.{3}$')";
SELECT substring('hello' SIMILAR '%#"__l#"%' ESCAPE '#');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)