函数
单行函数
函数 |
作用 |
备注 |
ABS(x) |
返回x的绝对值 |
|
SIGN(X) |
返回 x 的符号。证书返回 1,负数返回-1,0 返回0 |
|
PI() |
返回圆周率的值 |
|
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(-5),ABS(4),SIGN(10),SIGN(-10),SIGN(0),FLOOR(32.32),CEIL(32.32),CEILING(-43.32),CEILING(-43.32),CEILING(32.32),FLOOR(-43.32),MOD(12,5) FROM DUAL;
RAND | 随机数
相同的 x 会导致结果相同
SELECT RAND(),RAND(),RAND(0),RAND(0),RAND(10),RAND(10),RAND(-1),RAND(-1);
ROUND | 四舍五入
SELECT ROUND(125.555),ROUND(125.49),ROUND(-12.56),ROUND(-12.49),ROUND(123.456,1),ROUND(123.456,2),ROUND(123.456,-1),ROUND(123.456,-2);
# 126 125 -13 -12 123.5 123.46 120 100
TRUNCATE | 截断操作
SELECT TRUNCATE(123.456,0),TRUNCATE(123.456,1),TRUNCATE(123.456,-1) FROM DUAL;
# 123 123.4 120
单行函数的嵌套
SELECT TRUNCATE(ROUND(123.456,2),0) 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(5),ACOS(0.6) FROM DUAL;
指数 与 对数
函数 |
用法 |
备注 |
POW(x,y) POWER(x,y) |
返回 x 的 y 次方 |
|
EXP(x) |
返回 e 的 x 次方ex |
|
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,3),POWER(2,4),EXP(2) FROM DUAL;
EXP(x) 是ex
mysql> SELECT EXP(2);
+
| EXP(2) |
+
| 7.38905609893065 |
+
1 row in set (0.01 sec)
mysql> SELECT LN(EXP(2));
+
| LN(EXP(2)) |
+
| 2 |
+
进制转换函数
函数 |
作用 |
备注 |
BIN(x) |
返回 x 的二进制 |
|
OCT(x) |
返回 x 的八进制 |
|
HEX(x) |
返回 x 的十六进制 |
|
CONV(x,f1,f2) |
返回 f1 进制变成 f2 进制 |
|
SELECT BIN(123089471290387402) FROM DUAL;
SELECT CONV(15,16,8) FROM DUAL;
字符串函数
函数 |
作用 |
备注 |
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) |
同上,但是每个字符串之间要加上 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) |
字符串总长度为 10,不满的在左侧插入 pad(右对齐) |
|
RPAD(str,len,pad) |
字符串总长度为 10,不满的在右侧插入 pad(左对齐) |
|
LTRIM(s) |
去除字符串 s 的左侧空格 |
|
RTRIM(s) |
去除字符串 s 的右侧空格 |
|
TRIM(s) |
去除字符串 s 的首尾空格 |
|
TRIM(s1 FROM s) |
去掉字符串 s 开始与结尾的 s1 |
|
TRIM(LEADING s1 FROM s) |
去掉字符串 s 开始处的s1 |
|
TRIM(TRAILING 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是。一个以逗号分隔的字符串 |
|
REVERSE(s) |
返回 s 反转后的字符串 |
|
NULLIF(value1,value2) |
比较两个字符串,若是相等则返回 NULL ,否则返回value1 |
|
SELECT ASCII('abc'),CHAR_LENGTH('hello'),LENGTH('hello'),CHAR_LENGTH('你好'),LENGTH('你好') FROM DUAL;
注意:
- 中文的
你好
的LENGTH
为5,你好
的 CHAR_LENGTH
为2
- 字符串的索引是从
1
开始的
SELECT TRIM(' hel lo ');
SELECT REVERSE('ajksfghdfjuyagesufgkavdcsdekuy');
⌚️日期和时间函数
函数 |
作用 |
备注 |
CURDATE() / CURRENT_DATE() |
获取当前日期,包含年、月、日 |
|
CURTIME() / CURRENT_TIME() |
获取当前时间,包含时、分、秒 |
|
NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP() |
返回当前系统日期和时间 |
|
UTC_DATE () |
返回UTC(世界标准时间)日期 |
|
日期与时间戳转换
函数 |
作用 |
备注 |
UNIX_TIMESTAMP() |
以Unix时间戳的形式返回房钱时间。 |
SELECT UNIX_TIMESTAMP();–>1661173047 |
UNIX_YIMESTAMP(date) |
将时间date以Unix时间戳的形式返回 |
|
FROM_UNIXTIME(timestamp) |
将UNIX时间戳的时间转换为普通格式的时间 |
|
获取月份、星期、星期天、天数等函数
函数 |
用法 |
备注 |
YEAR(date) / MONTH(date) / DAY(date) |
返回具体的日期值 |
|
HOUR(time) / MINUTE(time) / SECOND(time) |
返回具体的时间值 |
|
MONTHNAME(date) |
返回月份:January,… |
|
DAYNAME(date) |
返回星期几,注意:周一是0,周二是1…周日是6 |
|
QUARTER(date) |
返回日期对应的季节,范围是1~4 |
|
WEEK(date),WEEKOFYEAR(date) |
返回一年中的第几周 |
|
DAYOFYEAR(date) |
返回日期是一年中的第几天 |
|
DAYOFMONTH(date) |
返回日期位于所在月份的第几天 |
|
DAYOFWEEK(date) |
返回洲际,注意:周日是1,周一是2…周六是7 |
|
日期的操作函数
函数 |
|
|
EXTRACT(type FROM date) |
返回指定日期的特定部分,type值返回值的类型 |
|
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 |
返回年和月 |
时间和秒钟转换的函数
函数 |
作用 |
备注 |
TIME_TO_SEC(time) |
将time转化为秒并返回结果值。转化的公式为:小时*3600+分钟*60+秒 |
|
SEC_TO_TIME(time) |
将seconds描述转化为包含小时、分钟和秒的时间 |
|
计算时间与日期的函数
函数 |
作用 |
备注 |
DATE_ADD(datetime, INTERVAL expr type), ADDDATE(date,INTERVAL expr type) |
返回与给定日期时间相差INTERVAL时间段的日期时间 |
|
DATE_SUB(date,INTERVAL expr type), SUBDATE(date,INTERVAL expr type) |
返回与date相差INTERVAL时间间隔的日斯 |
|
日期的格式化与解析
函数 |
作用 |
备注 |
DATE_FORMATE(date,fmt) |
按照字符串fmt格式化日期date值 |
|
TIME FORMAT(time,fmt) |
按照字符串fmt格式化时间time值 |
|
GET_FORMAT(date_type,format_type) |
返回日期字符串的显示格式 |
|
STR_TO_DATE(str, fmt) |
按照宇符串fmt对str进行解析,解析为一个日期 |
|
流程控制函数
流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。MysQL中的流程处理函数主要包括IF()、IFNULL()和CASE()西数。
函数 |
作用 |
备注 |
IF(vaine,value1,value2) |
如果value的值为TRUE,返回value1,否则 返回value2 |
|
IFNULL(value1, value2) |
如果value1不为NULL,返回value1,否则返 回value2 |
|
CASE WHEN 条件1THEN结果1WHEN 条件2THEN 结果2…ELSE resultn] END |
相当于Java的i.else if…else… |
|
CASE expr WHEN 常量值1THEN 值1 WHEN 常量值1THEN 值1… ELSE (En] END |
相当于Java的switch…case. |
|
IF
SELECT IF(1,2,3),IFNULL(123,456),IFNULL(NULL,456);
SELECT name,salary,IF(salary>6000,'高工资','低工资') "DETAILS" FROM employees;
CASE WHEN
SELECT salary,CASE WHEN salary>=15000 THEN '白骨精'
WHEN salary>=10000 THEN '潜力股'
WHEN salary>=8000 THEN '还不错'
ELSE '小屌丝' END
FROM employees;
CASE expr WHEN
SELECT salary,CASE department WHEN 10 THEN salary*1.1
WHEN 20 THEN salary*1.2
WHEN 30 THEN salary*1.3
ELSE salary*1.4 END "Salary"
FROM employees;
加密
PASSWORD
在 MySQL8.0中已经弃用
SELECT PASSWORD('MySQL') FROM DUAL;
MD5 | SHA
不可逆的加密方式
SELECT MD5('MySQL'),SHA('MySQL') FROM DUAL;
| 62a004b95946bb97541afa471dcca73a | deaa0c393a6613972aaccbf1fecfdad67aa21e88 |
ENCODE | D