记录:
Mysql函数查询与理解.
1.字符串处理函数
序号 | 名词 | 功能描述 | sql例子 |
1 | ASCII(s) | 返回字符串s的第一个字符的ASCII码。 | SELECT ASCII(A.GIRL_NAME) FROM t_girl_a A; |
2 | CHAR_LENGTH(s) | 返回字符串s的字符数 | SELECT CHAR_LENGTH(GIRL_NAME) FROM t_girl_a; |
3 | CHARACTER_LENGTH(s) | 返回字符串s的字符数 | SELECT CHARACTER_LENGTH('HelloWorld'); |
4 | CONCAT(s1,s2...sn) | 字符串s1,s2等多个字符串合并为一个字符串 | SELECT CONCAT('Hello','World','Python'); |
5 | CONCAT_WS(x, s1,s2...sn) | 同CONCAT(s1,s2,...)函数,但是每个字符串之间要加上x,x可以是分隔符 | SELECT CONCAT_WS('#','Hello','World','Python'); |
6 | FIELD(s,s1,s2...) | 返回第一个字符串s在字符串列表(s1,s2...)中的位置 | SELECT FIELD('World','Hello','World','Python'); |
7 | FIND_IN_SET(s1,s2) | 返回在字符串s2中与s1匹配的字符串的位置 | SELECT FIND_IN_SET('W','U,W,E,R'); |
8 | FORMAT(x,n) | 函数可以将数字x进行格式化"#,###.##",将x保留到小数点后n位,最后一位四舍五入。 | SELECT FORMAT(125.85272,3); |
9 | INSERT(s1,x,len,s2) | 字符串s2替换s1的x位置开始长度为len的字符串 | SELECT INSERT('HelloWorldPython',11,6,'Java'); |
10 | LOCATE(s1,s) | 从字符串s中获取s1的开始位置 | SELECT LOCATE('a','Java'); |
11 | LCASE(s) | 将字符串s的所有字母变成小写字母 | SELECT LCASE('Java'); |
12 | LEFT(s,n) | 返回字符串s的前n个字符 | SELECT LEFT('Java',2); |
13 | LOWER(s) | 将字符串s的所有字母变成小写字母 | SELECT LOWER('Java'); |
14 | LPAD(s1,len,s2) | 在字符串s1的开始处填充字符串s2,使字符串长度达到len | SELECT LPAD('23',12,'0'); |
15 | LTRIM(s) | 去掉字符串s开始处的空格 | SELECT LTRIM(' Java'); |
16 | MID(s,n,len) | 从字符串s的n位置截取长度为len的子字符串,同SUBSTRING(s,n,len) | SELECT MID('Java',2,2); |
17 | POSITION(s1 IN s) | 从字符串s中获取s1的开始位置 | SELECT POSITION('G' IN 'D Cup Girl'); |
18 | REPEAT(s,n) | 将字符串s重复n次 | SELECT REPEAT('Java',3); |
19 | REPLACE(s,s1,s2) | 将字符串s2替代字符串s中的字符串s1 | SELECT REPLACE('Gava','G','J'); |
20 | REVERSE(s) | 将字符串s的顺序反过来 | SELECT REVERSE('avaJ'); |
21 | RIGHT(s,n) | 返回字符串s的后n个字符 | SELECT RIGHT('python',2); |
22 | RPAD(s1,len,s2) | 在字符串s1的结尾处添加字符串s2,使字符串的长度达到len | SELECT LPAD('23',12,'0'); |
23 | RTRIM(s) | 去掉字符串s结尾处的空格 | SELECT LTRIM('Java '); |
24 | SPACE(n) | 返回n个空格 | SELECT SPACE(10); |
25 | STRCMP(s1,s2) | 比较字符串s1和s2,如果s1与s2相等返回0,如果s1>s2返回1,如果s1<s2返回-1 | SELECT STRCMP('Java', 'Java');SELECT STRCMP('Z', 'A'); SELECT STRCMP('A', 'Z'); |
26 | SUBSTR(s, start, length) | 从字符串s的start位置截取长度为length的子字符串 | SELECT SUBSTR('Java', 2, 3); |
27 | SUBSTRING(s, start, length) | 从字符串s的start位置截取长度为length的子字符串 | SELECT SUBSTRING('Java', 2, 2); |
28 | SUBSTRING_INDEX(s, delimiter, number) | 返回从字符串s的第number个出现的分隔符delimiter之后的子串。如果number是正数,返回第number个字符左边的字符串。如果number是负数,返回第(number的绝对值(从右边数))个字符右边的字符串。 | SELECT SUBSTRING_INDEX('java#python','#',1); SELECT SUBSTRING_INDEX('java#python','#',-1); |
29 | TRIM(s) | 去掉字符串s开始和结尾处的空格 | SELECT TRIM(' java#python '); |
30 | UCASE(s) | 将字符串转换为大写 | SELECT UCASE('JavaPython'); |
31 | UPPER(s) | 将字符串转换为大写 | SELECT UPPER('JavaPython'); |
2.数字处理函数
序号 | 名词 | 功能描述 | sql例子 |
1 | ABS(x) | 返回x的绝对值 | SELECT ABS(-153); |
2 | ACOS(x) | 求x的反余弦值(参数是弧度) | SELECT ACOS(0.35); |
3 | ASIN(x) | 求反正弦值(参数是弧度) | SELECT ASIN(0.35); |
4 | ATAN(x) | 求反正切值(参数是弧度) | SELECT ATAN(2.9); |
5 | ATAN2(n, m) | 求反正切值(参数是弧度) | SELECT ATAN2(-0.7, 2); |
6 | AVG(expression) | 返回一个表达式的平均值,expression是一个字段 | SELECT AVG(AGE) FROM t_girl_a; |
7 | CEIL(x) | 返回大于或等于x的最小整数 | SELECT CEIL(5.6); |
8 | CEILING(x) | 返回大于或等于x的最小整数 | SELECT CEILING(5.6); |
9 | COS(x) | 求余弦值(参数是弧度) | SELECT COS(3); |
10 | COT(x) | 求余切值(参数是弧度) | SELECT COT(6); |
11 | COUNT(expression) | 返回查询的记录总数,expression参数是一个字段或者*号 | SELECT COUNT(1) FROM t_girl_a; |
12 | DEGREES(x) | 将弧度转换为角度 | SELECT DEGREES(3.1415926); |
13 | n DIV m | 整除,n为被除数,m为除数 | SELECT 12 DIV 2; |
14 | EXP(x) | 返回e的x次方 | SELECT EXP(5); |
15 | FLOOR(x) | 返回小于或等于x的最大整数 | SELECT FLOOR(3.5); |
16 | GREATEST(expr1, expr2, ...) | 返回列表中的最大值 | SELECT GREATEST(29,30,31,99,23); |
17 | LEAST(expr1, expr2, ...) | 返回列表中的最小值 | SELECT LEAST(29,30,31,99,23); |
18 | 返回数字的自然对数 | SELECT LN(10); | |
19 | LOG(x) | 返回自然对数(以e为底的对数) | SELECT LOG(19); |
20 | LOG10(x) | 返回以10为底的对数 | SELECT LOG10(1000); |
21 | LOG2(x) | 返回以2为底的对数 | SELECT LOG2(10); |
22 | MAX(expression) | 返回字段expression中的最大值 | SELECT MAX(AGE) FROM t_girl_a; |
23 | MIN(expression) | 返回字段expression中的最小值 | SELECT MIN(AGE) FROM t_girl_a; |
24 | MOD(x,y) | 返回x除以y以后的余数 | SELECT MOD(9,2); |
25 | PI() | 返回圆周率(3.141593) | SELECT PI(); |
26 | POW(x,y) | 返回x的y次方 | SELECT POW(2,5); |
27 | POWER(x,y) | 返回x的y次方 | SELECT POWER(2,5); |
28 | RADIANS(x) | 将角度转换为弧度 | SELECT RADIANS(30); |
29 | RAND() | 返回0到1的随机数 | SELECT RAND(); |
30 | ROUND(x) | 返回离x最近的整数 | SELECT ROUND(1.9125); |
31 | SIGN(x) | 返回x的符号,x是负数、0、正数分别返回-1、0和1 | SELECT SIGN(-10); |
32 | SIN(x) | 求正弦值(参数是弧度) | SELECT SIN(RADIANS(45)); |
33 | SQRT(x) | 返回x的平方根 | SELECT SQRT(36); |
34 | SUM(expression) | 返回指定字段的总和 | SELECT SUM(AGE) FROM t_girl_a; |
35 | TAN(x) | 求正切值(参数是弧度) | SELECT TAN(2.75); |
36 | TRUNCATE(x,y) | 返回数值x保留到小数点后y位的值(与ROUND最大的区别是不会进行四舍五入) | SELECT TRUNCATE(1.52267,3); |
3.日期处理函数
序号 | 名词 | 功能描述 | sql例子 |
1 | ADDDATE(d,n) | 计算起始日期d加上n天的日期 | SELECT ADDDATE('2020-01-02', INTERVAL 8 DAY); |
2 | ADDTIME(t,n) | 时间t加上n秒的时间 | SELECT ADDTIME('2020-01-02 12:12:12', 8); |
3 | CURDATE() | 返回当前日期 | SELECT CURDATE(); |
4 | CURRENT_DATE() | 返回当前日期 | SELECT CURRENT_DATE(); |
5 | CURRENT_TIME | 返回当前时间 | SELECT CURRENT_TIME(); |
6 | CURRENT_TIMESTAMP() | 返回当前日期和时间 | SELECT CURRENT_TIMESTAMP(); |
7 | CURTIME() | 返回当前时间 | SELECT CURTIME(); |
8 | DATE() | 从日期或日期时间表达式中提取日期值 | SELECT DATE('2020-01-02'); |
9 | DATEDIFF(d1,d2) | 计算日期d1->d2之间相隔的天数 | SELECT DATEDIFF('2020-01-12','2020-01-03'); |
10 | DATE_ADD(d INTERVAL expr type) | 计算起始日期d加上一个时间段后的日期 | SELECT DATE_ADD('2020-01-02', INTERVAL 8 DAY); |
11 | DATE_FORMAT(d,f) | 按表达式f的要求显示日期d | SELECT DATE_FORMAT('2020-01-02 10:11:12','%Y-%c-%d %H:%i:%S'); |
12 | DATE_SUB(date,INTERVAL expr type) | 函数从日期减去指定的时间间隔。 | SELECT DATE_SUB('2020-01-02', INTERVAL 8 DAY); |
13 | DAY(d) | 返回日期值d的日期部分 | SELECT DAY('2020-01-02'); |
14 | DAYNAME(d) | 返回日期d是星期几,如Monday,Tuesday | SELECT DAYNAME('2020-01-02'); |
15 | DAYOFMONTH(d) | 计算日期d是本月的第几天 | SELECT DAYOFMONTH('2020-01-02 10:11:12'); |
16 | DAYOFWEEK(d) | 日期d今天是星期几,1星期日,2星期一,以此类推 | SELECT DAYOFWEEK('2020-01-02 10:11:12'); |
17 | DAYOFYEAR(d) | 计算日期d是本年的第几天 | SELECT DAYOFYEAR('2020-01-09 10:11:12'); |
18 | EXTRACT(type FROM d) | 从日期d中获取指定的值,type指定返回的值。 | SELECT EXTRACT(MINUTE FROM '2020-01-02 10:11:12'); |
19 | FROM_DAYS(n) | 计算从0000年1月1日开始n天后的日期 | SELECT FROM_DAYS(2020); |
20 | HOUR(t) | 返回t中的小时值 | SELECT HOUR('10:11:12'); |
21 | LAST_DAY(d) | 返回给给定日期的那一月份的最后一天 | SELECT LAST_DAY('2020-01-09 10:11:12'); |
22 | LOCALTIME() | 返回当前日期和时间 | SELECT LOCALTIME(); |
23 | LOCALTIMESTAMP() | 返回当前日期和时间 | SELECT LOCALTIMESTAMP(); |
24 | MAKEDATE(year, day-of-year) | 基于给定参数年份year和所在年中的天数序号day-of-year返回一个日期 | SELECT MAKEDATE(2020,200); |
25 | MAKETIME(hour, minute, second) | 组合时间,参数分别为小时、分钟、秒 | SELECT MAKETIME(10,11,12); |
26 | MICROSECOND(date) | 返回日期参数所对应的微秒数 | SELECT MICROSECOND("2020-01-02 10:11:12.000056"); |
27 | MINUTE(t) | 返回t中的分钟值 | SELECT MINUTE('10:11:12'); |
28 | MONTHNAME(d) | 返回日期当中的月份名称,如November | SELECT MONTHNAME('2020-01-02 10:11:12'); |
29 | MONTH(d) | 返回日期d中的月份值,1到12 | SELECT MONTH('2020-01-02 10:11:12'); |
30 | NOW() | 返回当前日期和时间 | SELECT NOW(); |
31 | PERIOD_ADD(period, number) | 为年-月组合日期添加一个时段 | SELECT PERIOD_ADD(202001,5); |
32 | PERIOD_DIFF(period1, period2) | 返回两个时段之间的月份差值 | SELECT PERIOD_DIFF(202010, 202001); |
33 | QUARTER(d) | 返回日期d是第几季节,返回1到4 | SELECT QUARTER('2020-01-02 10:11:12'); |
34 | SECOND(t) | 返回t中的秒钟值 | SELECT SECOND('10:11:12'); |
35 | SEC_TO_TIME(s) | 将以秒为单位的时间s转换为时分秒的格式 | SELECT SEC_TO_TIME(5320); |
36 | STR_TO_DATE(string, format_mask) | 将字符串转变为日期 | SELECT STR_TO_DATE('2020-01-03 10:11:12', '%Y-%m-%d %H:%i:%s'); |
37 | SUBDATE(d,n) | 日期d减去n天后的日期 | SELECT SUBDATE('2020-01-03 10:11:12',2); |
38 | SUBTIME(t,n) | 时间t减去n秒的时间 | SELECT SUBTIME('2020-01-03 10:11:12',13) |
39 | SYSDATE() | 返回当前日期和时间 | SELECT SYSDATE(); |
40 | TIME(expression) | 提取传入表达式的时间部分 | SELECT TIME('10:11:12'); |
41 | TIME_FORMAT(t,f) | 按表达式f的要求显示时间t | SELECT TIME_FORMAT('10:11:12','%i'); |
42 | TIME_TO_SEC(t) | 将时间t转换为秒 | SELECT TIME_TO_SEC('10:11:12'); |
43 | TIMEDIFF(time1, time2) | 计算时间差值 | SELECT TIMEDIFF('10:20:12','10:11:12'); |
44 | TIMESTAMP(expression, interval) | 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 | SELECT TIMESTAMP('2020-01-03','10:20:12'); |
45 | TO_DAYS(d) | 计算日期d距离0000年1月1日的天数 | SELECT TO_DAYS('2020-01-03 10:11:12'); |
46 | WEEK(d) | 计算日期d是本年的第几个星期,范围是0到53 | SELECT WEEK('2020-01-09 10:11:12'); |
47 | WEEKDAY(d) | 日期d是星期几,0表示星期一,1表示星期二 | SELECT WEEKDAY('2020-01-09 10:11:12'); |
48 | WEEKOFYEAR(d) | 计算日期d是本年的第几个星期,范围是0到53 | SELECT WEEKOFYEAR('2020-01-01 10:11:12'); |
49 | YEAR(d) | 返回年份 | SELECT YEAR('2020-01-01 10:11:12'); |
50 | YEARWEEK(date, mode) | 返回年份及第几周(0到53),mode中0表示周天,1表示周一,以此类推 | SELECT YEARWEEK('2020-12-11'); |
4.其它函数
序号 | 名词 | 功能描述 | sql例子 |
1 | BIN(x) | 返回x的二进制编码 | SELECT BIN(16); |
2 | BINARY(s) | 将字符串s转换为二进制字符串 | SELECT BINARY 'RUNOOB'; |
3 | CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN ELSE result END | CASE表示函数开始,END表示函数结束。如果condition1成立,则返回result1,如果condition2成立,则返回result2,当全部不成立则返回result,而当有一个成立之后,后面的就不执行了。 | SELECT CASE WHEN A.AGE < 29 THEN 'Y' WHEN A.AGE > 29 THEN 'Z' ELSE 'X' END AS 年龄 FROM t_girl_a A; |
4 | CAST(x AS type) | 转换数据类型 | SELECT CAST('2020-01-03' AS DATE); |
5 | COALESCE(expr1, expr2, ...., expr_n) | 返回参数中的第一个非空表达式(从左向右) | SELECT COALESCE(NULL,NULL,'Java','Py',NULL); |
6 | CONNECTION_ID() | 返回服务器的连接数 | SELECT CONNECTION_ID(); |
7 | CONV(x,f1,f2) | 返回f1进制数变成f2进制数 | SELECT CONV(16,11,2); |
8 | CONVERT(s USING cs) | 函数将字符串s的字符集变成cs | SELECT CHARSET('ABC');SELECT CHARSET(CONVERT('ABC' USING gbk)); |
9 | CURRENT_USER() | 返回当前用户 | SELECT CURRENT_USER(); |
10 | DATABASE() | 返回当前数据库名 | SELECT DATABASE(); |
11 | IF(expr,v1,v2) | 如果表达式expr成立,返回结果v1;否则,返回结果v2。 | SELECT IF(10 > 0,'y','n') |
12 | IFNULL(v1,v2) | 如果v1的值不为NULL,则返回v1,否则返回v2。 | SELECT IFNULL(null,'Java');SELECT IFNULL('python','Java'); |
13 | ISNULL(expression) | 判断表达式是否为NULL | SELECT ISNULL(null);SELECT ISNULL('zz'); |
14 | LAST_INSERT_ID() | 返回最近生成的AUTO_INCREMENT值 | SELECT LAST_INSERT_ID(); |
15 | NULLIF(expr1, expr2) | 比较两个字符串,如果字符串expr1与expr2相等返回NULL,否则返回expr1 | SELECT NULLIF(30, 30);SELECT NULLIF(30, 35); |
16 | SESSION_USER() | 返回当前用户 | SELECT SESSION_USER(); |
17 | SYSTEM_USER() | 返回当前用户 | SELECT SYSTEM_USER(); |
18 | USER() | 返回当前用户 | SELECT USER(); |
19 | VERSION() | 返回数据库的版本号 | SELECT VERSION(); |
5.例子中使用的建表语句
CREATE TABLE `t_girl_a` (
`GIRL_ID` BIGINT(16) NOT NULL AUTO_INCREMENT COMMENT 'ID号',
`GIRL_NAME` VARCHAR(64) COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',
`AGE` INT(6) DEFAULT NULL COMMENT '年龄',
`INSERT_TIME` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '插入或更新时间',
PRIMARY KEY `pk_t_girl_a_girl_id` (GIRL_ID)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='女孩信息';
以上,感谢.