第七章:单行函数
7.1:函数的理解
-
什么是函数
函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样即提高了代码效率,又提高了可维护性。在
SQL
中我们也可以使用函数对检索出来的数据进行操作。使用这些函数,可以极大地提高用户对数据库的管理效率。 从函数定义的角度出发,我们可以将函数分成内置函数和自定义函数。在
SQL
语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的。 -
不同
DBMS
函数的差异 我们在使用
SQL
语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS
。DBMS
之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数被DBMS
同时支持的。大部分DBMS
会有自己特定的函数,这就意味着采用SQL
函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。 -
MySQL
内置函数及分类
MySQL
提供了丰富的内置函数,这些函数使得数据的维护与管理更加方便,能够更好地提供数据的分析与统计功能,在一定程度上提高了开发人员进行数据分析与统计的效率。
MySQL
提供的内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与加密函数、获取MySQL
信息函数、集合函数等。这里,我们将这些丰富的内置函数再分为两类:单行函数、聚合函数(或分组函数)。- 单行函数
- 操作数据对象
- 接受参数返回的一个结果
- 只对一行进行变换
- 每行返回一个结果
- 可以嵌套
- 参数可以是一列或一个值
- 单行函数
7.2:数值函数
-
基本函数
函数 用法 ABS(x)
返回 x
的绝对值SIGN(x)
返回 x
的符号。正数返回1,负数返回-1,0返回0PI()
返回圆周率的值 CEIL(x)、CEILING(x)
向上取整 FLOOR(x)
向下取整 LEAST(e1, e2, e3 ... )
返回列表中的最小值 GREATEST(e1, e2, e3 ... )
返回列表中的最大值 MOD(x, y)
返回 x
除以y
后的余数RAND()
返回 0-1
的随机值RAND(x)
返回 0-1
的随机值,其中x
的值用作种子值,相同的x
值会产生相同的随机值ROUND(x)
返回一个对 x
的值进行四舍五入后,最接近于x
的整数ROUND(x, y)
返回一个对 x
的值进行四舍五入后最接近的x
,并保留到小数位后面y
位TRUNCATE(x, y)
返回数字 x
截断为y
位小数的结果SQRT(x)
返回 x
的平方根。当x
的值为负数时,返回NULL
。# 基本的操作 SELECT ABS(-123), ABS(32), SIGN(-23), SIGN(43), PI(), CEIL(32.32), CEILING(-43.23), FLOOR(32.32), FLOOR(-43.23), MOD(12, 5) FROM DUAL;#取随机数 SELECT RAND(), RAND(), RAND(10), RAND(10), RAND(-1), RAND(-1) FROM DUAL;#四舍五入 SELECT ROUND(123.556), ROUND(123.456, 0), ROUND(123.456, 1), ROUND(123.456, 2), ROUND(123.456, -1), ROUND(153.456, -2) FROM DUAL;# 截断操作 SELECT TRUNCATE(123.456, 0), TRUNCATE(123.496, 1), TRUNCATE(129.45, -1) FROM DUAL;
-
角度与弧度互换函数
函数 用法 RADIANS(x)
将角度转化为弧度,其中,参数x为角度值。 DEGREES(x)
将弧度转化为角度,其中,参数x为弧度制 SELECT RADIANS(30), RADIANS(45), RADIANS(60), RADIANS(90), DEGREES(2 * PI()), DEGREES(RADIANS(60)) FROM DUAL;
-
三角函数
函数 用法 SIN(x)
返回 x
的正弦值,其中,参数x
为弧度值ASIN(x)
返回 x
反正弦值,即获取正弦为x
的值。如果x
的值不在-1
到1
之间,则返回NULL
COS(x)
返回 x
的余弦值,其中参数x
为弧度值ACOS(x)
返回 x
的反余弦值,即获取余弦为x
的值,如果x
的值不在-1
到1
之间,则返回NULL
TAN(x)
返回 x
的正切值,其中,参数x
为弧度值ATAN(x)
返回 x
的反正切值,即返回正切值为x
的值ATAN2(m, n)
返回两个参数的反正切值 COT(x)
返回 x
的余切值,其中,x
为弧度值SELECT SIN(RADIANS(30)), DEGREES(ASIN(1)), TAN(RADIANS(45)), DEGREES(ATAN(1)) FROM DUAL;
-
指数与对数
函数 用法 POW(x, y)、POWER(x, y)
返回 x
的y
的次方EXP(x)
返回 e
的X
次方,其中e
是一个常数,2.718281828459045
LN(x)、LOG(x)
返回以 e
为底的X
的对数,当x <= 0
时,返回的结果为NULL
LOG10(x)
返回以 10
为底的X
的对数,当x <= 0
时,返回的结果为NULL
LOG2(x)
返回以 2
为底的X
的对数,当x <= 0
时,返回的结果为NULL
SELECT POW(2, 5), POWER(2, 4), EXP(2) FROM DUAL;SELECT LN(EXP(2)), LOG(EXP(2)), LOG10(10), LOG2(4) FROM DUAL;
-
进制间的转换
函数 用法 BIN(x)
返回 x
的二进制编码HEX(x)
返回 x
的十六进制编码OCT(x)
返回 x
的八进制编码CONV(x, f1, f2)
返回 f1
的进制数变成f2
进制数SELECT BIN(10), HEX(10), OCT(10), CONV(10, 10, 8) FROM DUAL;
7.3:字符串函数
函数 | 用法 |
---|---|
ASCII(s) | 返回字符串s 中的第一个字符的ASCII 码值 |
CHAR_LENGTH(s) | 返回字符串s 的字符数。作用与CHARACTER_LENGTH(s) 相同 |
LENGTH(s) | 返回字符串s 的字节数,和字符集有关 |
CONCAT(s1, s2, ...., sn) | 连接s1, s2, ...., sn 为一个字符串 |
CONCAT_WS(x, s1, s2, ...., sn) | 同CONCAT(s1, s2, ...) 函数,但是每个字符串之间要加上x |
INSERT(str, idx, len, replacestr) | 将字符串str 从第idx 位置开始,len 个字符长的子串替换为字符串replacestr |
REPLACE(str, a, b) | 用字符串b 替换字符串str 中所有出现的字符串a |
UPPER(s) 或UCASE(s) | 将字符串s 的所有字母转成大写字母 |
LOWER(s) 或LCASE(s) | 将字符串s 的所有字母转成小写字母 |
LEFT(str, n) | 返回字符串str 最左边的n 个字符 |
RIGHT(str, n) | 返回字符串str 最右边的n 个字符 |
LPAD(str, len, pad) | 用字符串pad 对str 最左边进行填充,知道str 的长度为len 个字符 |
RPAD(str, len, pad) | 用字符串pad 对str 最右边进行填充,直到str 的长度为len 个字符 |
LTRIM(s) | 去掉字符串s 左侧的空格 |
RTRIM(s) | 去掉字符串s 右侧的空格 |
TRIM(s) | 去掉字符串s 开始与结尾的空格 |
TRIM(s1 FROM s) | 去掉字符串s 开始与结尾的s1 |
TRIM(LEADING s1 FROM s) | 去掉字符串s 开始处的s1 |
TRIM(TRAILNG s1 FROM s) | 去掉字符串s 尾处的s1 |
REPEAT(str, n) | 返回str 重复n 的结果 |
SPACE(n) | 返回n 个空格 |
STRCMP(s1, s2) | 比较字符串s1 , s2 的ASCII 码值的大小 |
SUBSTR(s, index, len) | 返回从字符串s 的index 位置其len 个字符,作用与SUBSTRING(s, n, len) 、MID(s, n, len) 相同 |
LOCATE(substr, str) | 返回字符串substr 在字符串str 中首次出现的位置,作用于POSITION(substr IN str) 、INSTR(str, substr) 相同。未找到,返回0 |
ELT(m, s1, s2, ..., sn) | 返回指定位置的字符串,如果m=1 ,则返回s1 ,如果m=2 ,则返回s2 ,如果m=n ,则返回sn |
FIELD(s, s1, s2, ..., sn) | 返回字符串s 在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1, s2) | 返回字符串s1 在字符串s2 中出现的位置。其中,字符串s2 是一个以逗号分隔的字符串 |
REVERES(s) | 返回s 反转后的字符串 |
NULLIF(value1, value2) | 比较两个字符串,如果value1 与value2 相等,则返回NULL ,否则返回value1 |
SELECT ASCII('Abcfsf'), CHAR_LENGTH('hello'), CHAR_LENGTH('我们'), LENGTH('hello'), LENGTH('我们')
FROM DUAL;# xxx worked for yyy
SELECT CONCAT(emp.last_name, ' worked for ', mgr.last_name) "details"
FROM employees emp JOIN employees mgr
WHERE emp.manager_id = mgr.employee_id;SELECT CONCAT_WS('-', 'hello', 'world', 'hello', 'beijing')
FROM DUAL;#字符串的索引是从1开始的!
SELECT INSERT('helloworld', 2, 3, 'aaaaa'), REPLACE('hello', 'lol', 'mmm')
FROM DUAL;SELECT UPPER('HelLo'), LOWER('HelLo')
FROM DUAL;SELECT last_name, salary
FROM employees
WHERE LOWER(last_name) = 'King';SELECT LEFT('hello', 2), RIGHT('hello', 3), RIGHT('hello', 13)
FROM DUAL;# LPAD:实现右对齐效果
# RPAD:实现左对齐效果
SELECT employee_id, last_name, LPAD(salary, 10, ' ')
FROM employees;SELECT CONCAT('---', LTRIM(' h el lo '), '***'),TRIM('oo' FROM 'ooheollo')
FROM DUAL;SELECT REPEAT('hello', 4), LENGTH(SPACE(5)), STRCMP('abc', 'abe')
FROM DUAL;SELECT SUBSTR('hello', 2, 2), LOCATE('lll', 'hello')
FROM DUAL;SELECT ELT(2, 'a', 'b', 'c', 'd'), FIELD('mm', 'gg', 'jj', 'mm', 'dd', 'mm'),
FIND_IN_SET('mm', 'gg,mm,jj,dd,mm,gg')
FROM DUAL;SELECT employee_id, NULLIF(LENGTH(first_name), LENGTH(last_name)) "compare"
FROM employees;
7.4:日期和时间函数
-
获取日期、时间
函数 用法 CURDATE()、CURRENT_DATE()
返回当前日期,只包含年、月、日 CURTIME()、CURRENT_TIME()
返回当前时间,只包含时、分、秒 NOW()、SYSDATE()、CURRENT_TIMEAMP()、LOCALTIME()、LOCALTIMESTAMP()
返回当前系统日期和时间 UTC_DATE()
返回 UTC(世界标准时间)
日期UTC_TIME()
返回 UTC(世界标准时间)
时间SELECT CURDATE(), CURRENT_DATE(), CURTIME(), NOW(), SYSDATE(), UTC_DATE(), UTC_TIME() FROM DUAL;
-
日期与时间戳的转换
函数 用法 UNIX_TIMESTAMP()
以 UNIX
时间戳的形式返回当前时间UNIX_TIMESTAMP(date)
将时间 date
以UNIX
时间戳的形式返回FROM_UNIXTIME(timestamp)
将 UNIX
时间戳的时间转换为普通格式的时间SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP('2021-10-01 12:12:32'), FROM_UNIXTIME(1635173853), FROM_UNIXTIME(1633061552) FROM DUAL;
-
获取月份、星期、星期数、天数等函数
函数 用法 YEAR(date)、MONTH(date)、DAY(date)
返回具体的日期值 HOUR(time)、MINUE(time)、SECOND(time)
返回具体的时间值 MONTHNAME(date)
返回月份 DAYNAME(date)
返回星期几 WEEKDAY(date)
返回周几,注意:周1是0,周2是1,… QUARTER(date)
返回日期对应的季度,范围为 1~4
WEEK(date)、WEEKOFYEAR(date)
返回一年中的第几周 DAYOFYEAR(date)
返回日期是一年中的第几天 DAYOFMONTH(date)
返回日期位于所在月份的第几天 DAYODWEEK(date)
返回周几,注意:周日是1,周一是2,… SELECT YEAR(CURDATE()), MONTH(CURDATE()), DAY(CURDATE()), HOUR(CURTIME()), MINUTE(NOW()), SECOND(SYSDATE()) FROM DUAL;SELECT MONTHNAME('2021-10-26'), DAYNAME('2021-10-26'), WEEKDAY('2021-10-26'), QUARTER(CURDATE()), WEEK(CURDATE()), DAYOFYEAR(NOW()), DAYOFMONTH(NOW()), DAYOFWEEK(NOW()) FROM DUAL;
-
日期的操作函数
函数 用法 EXTRACT(type FROM date)
返回指定日期中特定的部分, type
指定返回的值EXTRACT(type FROM date)
函数中type
的取值与含义:type值 含义 MICROSECOND
返回毫秒数 SECOND
返回秒数 MINUTE
返回分钟数 HOUR
返回小时数 DAY
返回天数 WEEK
返回日期在一年中的第几个星期 MONTH
返回日期在一年中的第几个月 QUARTER
返回日期在一年中的第几个季度 YEAR
返回日期的年份 SECOND_MICROSECOND
返回秒和毫秒值 MINUTE_MICROSECOND
返回分钟和毫秒值 MINUTE_SECOND
返回分钟和秒值 HOUR_MICROSECOND
返回小时和毫秒值 HOUR_SECOND
返回小时和秒值 HOUR_MINUTE
返回小时和分钟值 DAY_MICROSECOND
返回天和毫秒值 DAY_SECOND
返回天和秒值 DAY_MINUTE
返回天和分钟值 DAY_HOUR
返回天和小时 YEAR_MONTH
返回年和月 SELECT EXTRACT(SECOND FROM NOW()), EXTRACT(DAY FROM NOW()), EXTRACT(HOUR_MINUTE FROM NOW()), EXTRACT(QUARTER FROM '2021-05-12') FROM DUAL;
-
时间和秒钟转换的函数
函数 用法 TIME_TO_SEC(time)
将 time
转化为秒并返回结果集。SEC_TO_TIME(seconds)
将 seconds
描述转换化为包含小时、分钟和秒的时间SELECT TIME_TO_SEC(CURTIME()),SEC_TO_TIME(83355) FROM DUAL;
-
计算日期和时间的函数
-
第一组
函数 用法 DATE_ADD(datetime, INIERVAL expr type)
、ADDDATE(date, INTERVAL expr type)
返回与给定日期时间相差 INTERVAL
时间段的日期时间DATE_SUB(date, INTERVAL expr type)
、SUBDATE(date, INTERVAL expr type)
返回与 date
相差INTERVAL
时间间隔的日期上述函数中
type
的取值间隔类型 含义 HOUR
小时 MINUTE
分钟 SECOND
秒 YEAR
年 MONTH
月 DAY
日 YEAR_MONTH
年和月 DAY_HOUR
日和小时 DAY_MINUTE
日和分钟 DAY_SECOND
日和秒 HOUR_MINUTE
小时和分钟 HOUR_SECOND
小时和秒 MINUTE_SECOND
分钟和秒 SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 YEAR), DATE_ADD(NOW(), INTERVAL -1 YEAR), DATE_SUB(NOW(), INTERVAL 1 YEAR) FROM DUAL;SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS col1, DATE_ADD('2021-10-21 23:32:12', INTERVAL 1 SECOND) AS col2, ADDDATE('2021-10-21 23:32:12', INTERVAL 1 SECOND) AS col3, DATE_ADD('2021-10-21 23:32:12', INTERVAL '1_1' MINUTE_SECOND) AS col4, DATE_ADD(NOW(), INTERVAL -1 YEAR) AS col5, DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) AS col6 FROM DUAL;
-
第二组
函数 用法 ADDTIME(time1, time2)
返回 time1
加上time2
的时间。当time2
为一个数字时,代表的是秒,可以为负数SUBTIME(time1, time2)
返回 time1
减去time2
后的时间。当time2
为一个数字时,代表是秒,可以为负数DATEDIFF(date1, date2)
返回 date1 - date2
的日期间隔天数TIMEDIFF(time1, time2)
返回 time1 - time2
的时间间隔FROM_DAYS(N)
返回从 0000
年1
月1
日起,N
天后的日期TO_DAYS(date)
返回日期 date
距离0000
年1
月1
的天数LAST_DAY(date)
返回 date
所在月份的最后一天的日期MAKEDATE(year, n)
针对给定年份与所在年份中的天数返回一个日期 MAKETIME(hour, minute, second)
将给定的小数、分钟和秒组合成时间并返回 PERIOD_ADD(time, n)
返回 time
加上n
后的时间SELECT ADDTIME(NOW(), 20), SUBTIME(NOW(), 30), SUBTIME(NOW(), '1:1:3'), DATEDIFF(NOW(), '2021-10-01'), TIMEDIFF(NOW(), '2021-10-25 22:10:10'), FROM_DAYS(366), TO_DAYS('0000-12-25'), LAST_DAY(NOW()), MAKEDATE(YEAR(NOW()), 32), MAKETIME(10, 21, 23), PERIOD_ADD(20200101010101, 10) FROM DUAL;
-
-
日期的格式化与解析
函数 用法 DATE_FORMAT(date, fmt)
按照字符串 fmt
格式化日期date
值TIME_FORMAT(time, fmt)
按照字符串 fmt
格式化时间time
值GET_FORMAT(date_type, format_type)
返回日期字符串的显示格式 STR_TO_DATE(str, fmt)
按照字符串 fmt
对str
进行解析,解析为一个日期上述非
GET_FORMAT
函数中fmt
参数常用的格式符:格式符 说明 格式化 说明 %Y
4位数字表示年份 %y
表示两位数字表示年份 %M
月名表示月份 %m
两位数字表示月份 %b
缩写的月份 %c
数字表示月份 %D
英文后缀表示月中的天数 %d
两位数字表示月中的天数 %e
数字形式表示月中的天数 %H
两位数字表示小数, 24
小时制%h
和%l
两位数字表示小时,12小时制( 01
,02 ....
)%k
数字形式的小时,24小时制 %l
数字形式表示小时,12小时制( 1, 2, 3, 4
)%i
两位数字表示分钟( 00
,01....
)%S
和%s
两位数字表示秒( 00
,01 ...
)%W
一周中的星期名称 %a
一周中的星期缩写 %w
以数字表示周中的天数 %j
以3位数字表示年中的天数 %U
以数字表示年中的第几周,其中 Sunday
为周中第一天%u
以数字表示年中的第几周,其中 Monday
为周中第一天%T
24小时制 %r
12小时制 %p
AM
或PM
%%
表示 %
GET_FORMAT
函数中date_type
和format_type
参数取值如下:日期类型 格式化类型 返回的格式化字符串 DATE
USA
%m.%d.%Y
DATE
JIS
%Y-%m-%d
DATE
ISO
%Y-%m-%d
DATE
EUR
%d.%m.%Y
DATE
INTERNAL
%Y%m%d
TIME
USA
%h:%i:%s %p
TIME
JIS
%H:%i:%s
TIME
ISO
%H:%i:%s
TIME
EUR
%H.%i.%s
TIME
INTERNAL
%H%i%s
DATETIME
USA
%Y-%m-%d %H.%i.%s
DATETIME
JIS
%Y-%m-%d %H:%i:%s
DATETIME
ISO
%Y-%m-%d %H:%i:%s
DATETIME
EUR
%Y-%m-%d %H.%i.%s
DATETIME
INTERNAL
%Y%m%d%H%i%s
#格式化: SELECT DATE_FORMAT(CURDATE(), '%Y-%M-%D'), DATE_FORMAT(NOW(), '%Y-%m-%d'), TIME_FORMAT(CURTIME(), '%h:%i:%S'), DATE_FORMAT(NOW(), '%Y-%M-%D %h:%i:%S %W %w %T %r') FROM DUAL;#解析:格式化的逆过程 SELECT STR_TO_DATE('2021-October-25th 11:37:30 Monday 1', '%Y-%M-%D %h:%i:%S %W %w') FROM DUAL;SELECT GET_FORMAT(DATE, 'USA') FROM DUAL;SELECT DATE_FORMAT(CURDATE(), GET_FORMAT(DATE, 'USA')) FROM DUAL;
7.5:流程控制函数
流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL
语句中实现不同的条件选择。MySQL
中的流程处理函数主要包括IF()
、IFNULL()
和CASE()
函数。
函数 | 用法 |
---|---|
IF(value, vaule1, vaule2) | 如果value 的值为TRUE ,返回value1 ,否则返回value2 |
IFUNLL(value1, value2) | 如果value1 不为NULL ,返回value1 ,否则返回value2 |
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... [ELSE resultn] END | 相当于Java 的if ... else if ... else ... |
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1 ... [ELSE resultn] END | 相当于Java 的switch ... case ... |
#1 IF(VALUE,VALUE1,VALUE2)
SELECT last_name, salary, IF(salary >= 6000, '高工资', '低工资') "details"
FROM employees;#2 IFNULL(VALUE1,VALUE2):看做是IF(VALUE,VALUE1,VALUE2)的特殊情况
SELECT last_name, commission_pct,IFNULL(commission_pct, 0) "details"
FROM employees;#3 CASE WHEN ... THEN ...WHEN ... THEN ... ELSE ... END
SELECT last_name, salary, CASE WHEN salary >= 15000 THEN '领导'WHEN salary >= 10000 THEN '白领'WHEN salary >= 8000 THEN '蓝领'ELSE '临时工' END "details", department_id
FROM employees;#4 CASE ... WHEN ... THEN ... WHEN ... THEN ... ELSE ... END
SELECT employee_id, last_name, department_id, salary, CASE department_id WHEN 10 THEN salary * 1.1WHEN 20 THEN salary * 1.2WHEN 30 THEN salary * 1.3ELSE salary * 1.4 END "details"
FROM employees;
7.6:加密与解密函数
加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在保证数据安全时非常有用。
函数 | 用法 |
---|---|
PASSWORD(str) | 返回字符串str 的加密版本,41位长的字符串。加密结果不可逆 |
MD5(str) | 返回字符串str 的md5 加密后的值,也是一种加密方式。若参数为NULL ,则会返回NULL |
SHA(str) | 从原明文密码str 计算并返回加密后的密码字符串,当参数为NULL 时,返回NULL 。SHA 加密算法比MD5 更加安全 |
ENCODE(value, password_seed) | 返回使用password_seed 作为加密密码加密value |
DECODE(value, password_seed) | 返回使用password_seed 作为加密密码解密value |
# PASSWORD()在mysql8.0中弃用。
/*
SELECT PASSWORD('mysql')
FROM DUAL;
*/
SELECT MD5('mysql'), SHA('mysql'), MD5(MD5('mysql'))
FROM DUAL;
#ENCODE()\DECODE() 在mysql8.0中弃用。
/*
SELECT ENCODE('atguigu','mysql'),DECODE(ENCODE('atguigu','mysql'),'mysql')
FROM DUAL;
*/
7.7:MySQL信息函数
MySQL
中内置了一些可以查询MySQL
信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作。
函数 | 用法 |
---|---|
VERSION() | 返回当前MySQL 的版本号 |
CONNECTION_ID() | 返回当前MySQL 服务器的连接数 |
DATABASE() 、SCHEMA() | 返回MySQL 命令行当前所在的数据库 |
USER() 、CURRENT_USER() 、SYSTEM_USER() 、SESSION_USER() | 返回当前连接MySQL 的用户名,返回结果格式为主机名@用户名 |
CHARSET(value) | 返回字符串value 自变量的字符集 |
COLLATION(value) | 返回字符串value 的比较规则 |
SELECT VERSION(), CONNECTION_ID(), DATABASE(), SCHEMA(),
USER(), CURRENT_USER(), CHARSET('小王同学'), COLLATION('小王同学')
FROM DUAL;
7.8:其他函数
MySQL
中有些函数无法对其进行具体的分类,但是这些函数在MySQL
的开发和运维过程中也是不容忽视的。
函数 | 用法 |
---|---|
FORMAT(value, n) | 返回对数字value 进行格式化后的结果数据。n 表示四舍五入后保留到小数点后n 位 |
CONV(value, from, to) | 将value 的值进行不同进制之间的转换 |
INET_ATON(ipvalue) | 将以点分隔的IP 地址转化为一个数字 |
INET_NTOA(value) | 将数字形式的IP 地址转化为以点分隔的IP 地址 |
BENCHMARK(n, expr) | 将表达式expr 重复执行n 次。用于测试MySQL 处理expr 表达式所耗费的时间 |
CONVERT(value USING char_code) | 将value 所使用的字符编码修改为char_code |
#如果n的值小于或者等于0,则只保留整数部分
SELECT FORMAT(123.125, 2), FORMAT(123.125, 0), FORMAT(123.125, -2)
FROM DUAL;SELECT CONV(16, 10, 2), CONV(8888, 10, 16), CONV(NULL, 10, 2)
FROM DUAL;SELECT INET_ATON('192.168.1.100'), INET_NTOA(3232235876)
FROM DUAL;SELECT BENCHMARK(100000, MD5('mysql'))
FROM DUAL;SELECT CHARSET('atguigu'), CHARSET(CONVERT('atguigu' USING 'gbk'))
FROM DUAL;