函数
单行函数
| 函数 |
作用 |
备注 |
| 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