MySQL | 单行函数 |时间函数 | 系统函数

函数

单行函数

函数作用备注
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;
## 5	4	1	-1	0	32	33	-43	-43	33	-44	2

RAND | 随机数

相同的 x 会导致结果相同

SELECT RAND(),RAND(),RAND(0),RAND(0),RAND(10),RAND(10),RAND(-1),RAND(-1);
# 0.11622921760774145	0.1567088152810082	0.15522042769493574	0.15522042769493574	0.6570515219653505	0.6570515219653505	0.9050373219931845	0.9050373219931845

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;
# 123 

三角函数

函数作用备注
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;
# -0.9589242746631385	0.9272952180016123

指数 与 对数

函数用法备注
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;
# 8	16	7.38905609893065

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;
# 110110101010011010011100011010011110110101010101111001010
SELECT CONV(15,16,8) FROM DUAL;
# 25

字符串函数

函数作用备注
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;
# 97	5	5	2	6

注意:

  • 中文的 你好LENGTH为5,你好CHAR_LENGTH 为2
  • 字符串的索引是从1开始的
SELECT TRIM('    hel      lo    ');
# `hel      lo`
SELECT REVERSE('ajksfghdfjuyagesufgkavdcsdekuy');
# yukedscdvakgfusegayujfdhgfskja

⌚️日期和时间函数

函数作用备注
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小时
DAYWEEK日期在一年中的第几个星期
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);
# 2	123	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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值