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