MySQL--day6--单行函数

(以下内容全部来自上述课程)

单行函数

1. 内置函数及分类

  • 单行函数
  • 聚合函数(或分组函数)

1.1 单行函数特点

  • 操作数据对象
  • 接受参数返回一个结果
  • 只对一行进行变换
  • 每行返回一个结果
  • 可以嵌套
  • 参数可以是一列或一个值

2. 数值函数

2.1 基本函数

sql 复制代码
#1.数值函数
# 基本的操作
# 	  绝对值:123     32	 正负号:-1    1     3.14...    33          -43           32
SELECT ABS (-123),ABS (32),SIGN (-23),SIGN (43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32),
#    -44        取余:2     2       2
FLOOR(-43.23),MOD(12,5),12 MOD 5,12 % 5 
FROM DUAL;

# 取随机数:()内因子相同,随机数也相同
SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1) 
FROM DUAL;

#四舍五入,截断操作
#           124             123              123.5            123.46              120              200
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;

#                123                 123.4              120
SELECT TRUNCATE(123.456,0),TRUNCATE(123.496,1),TRUNCATE(129.45,-1) 
FROM DUAL;

#单行函数可以嵌套
#                  123
SELECT TRUNCATE(ROUND(123.456,2),0) 
FROM DUAL;

2.2 角度与弧度的转换

sql 复制代码
#角度与弧度的互换
SELECT RADIANS(30),RADIANS(45),RADIANS(60),RADIANS(90), 
DEGREES(2*PI()),DEGREES(RADIANS(60)) 
FROM DUAL;

2.3 三角函数

2.4 指数与对数

sql 复制代码
# 指数与对数
#       32          16        7.389....
select pow(2,5),power(2,4),exp(2)
from dual;

#          2 			2	    	1		2
select ln(exp(2)),log(exp(2)),log10(10),log2(4),
from dual;

2.5 进制间的转换

sql 复制代码
#进制间的转换
SELECT BIN(10),HEX(10),OCT(10),CONV(10),2,8) 
FROM DUAL;

3.字符串函数

sql 复制代码
# 2.字符串函数
#          65                   5                  2
SELECT ASCII('Abcdfsf'),CHAR_LENGTH('hello'),CHAR_LENGTH('我们'), 
#       5             6
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;

#字符串的索引是从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;


4. 日期和时间函数

4.1 获取日期、时间

4.2 日期与时间戳的转换

4.3 获取月份、星期、星期数、天数等函数

4.4 日期的操作函数



sql 复制代码
SELECT EXTRACT(MINUTE FROM NOW()),EXTRACT( WEEK FROM NOW()),
EXTRACT( QUARTER FROM NOW()),EXTRACT(MINUTE_SECOND FROM NOW()) 
FROM DUAL;

4.5 时间和秒钟转换的函数

4.6 计算日期和时间的函数

  • 第一组:

sql 复制代码
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;

SELECT DATE_SUB('2021-01-21',INTERVAL 31 DAY) AS col1, 
SUBDATE('2021-01-21',INTERVAL 31 DAY) AS col2,
DATE_SUB('2021-01-2102:01:01',INTERVAL '1 1'DAY_HOUR) AS col3 
FROM DUAL;
  • 第二组:
sql 复制代码
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()),12),MAKETIME(10,21,23),PERIOD_ADD(20200101010101,10) 
FROM DUAL;

4.7 日期的格式化与解析



sql 复制代码
#3.7 日期的格式化与解析
#格式化:日期--->字符串
# 解析:	字符串 ---->日期	
#此时我们谈的是日期的显式格式化和解析#之前,我们接触过隐式的格式化或解析 
SELECT *
FROM	employees	
WHERE hire date= '1993-01-13';

#格式化:
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-0ctober-25th 11:34:42 Monday 1 23:34:42','%Y-%M-%D %h:%i:%S %W %w %T') 
FROM DUAL;

5. 控制流程函数

sql 复制代码
#4.流程控制函数
#IF (VALUE,VALUE1,VALUE2)
SELECT last_name, salary,IF(salary >= 6000,'高工资','低工资')"details" 
FROM employees;

SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL, commission_pct,0) "details",
salary	12 * (1+ IF(commission_pct IS NOT NULL,commission_pct,0)) "annual_sal"	
FROM employees;

#4.2 IFNULL(VALUE1,VALUE2):看做是IF(VALUE,VALUE1,VALUE2)的特殊情况 
SELECT last_name,commission_pct,IFNULL(commission_pct,0) "details" 
FROM employees;

#4.3 CASE WHEN... THEN ...WHEN	...THEN	ELSE END	
# 类似于java的if ...	else if	...	else if	...	else	
SELECT last name,salary,CASE 
WHEN salary>= 15000 THEN'白骨精'
WHEN salary	>= 10000 THEN'潜力股'	
WHEN salary >= 8000 THEN'小屌丝'
ELSE '草根' END "details",department id
FROM employees;
相关推荐
MMMMMMMMMMemory4 分钟前
使用 MySQL Shell 进行 MySQL 单机到 InnoDB Cluster 的数据迁移实践
mysql
小墙程序员8 分钟前
Android 性能优化(五)Heap Dump 的使用
android·性能优化
阿华的代码王国13 分钟前
【Android】RecyclerView实现新闻列表布局(1)适配器使用相关问题
android·xml·java·前端·后端
EngZegNgi22 分钟前
Unity —— Android 应用构建与发布
android·unity·自动化·游戏引擎·构建
fatiaozhang952723 分钟前
烽火HG680-KX-海思MV320芯片-2+8G-安卓9.0-强刷卡刷固件包
android·电视盒子·刷机固件·机顶盒刷机
LiuYaoheng1 小时前
【Android】使用 Intent 传递对象的两种序列化方式
android·java·笔记·学习
啊森要自信1 小时前
【MySQL 数据库】MySQL索引特性(二)页目录&&(B和B+树)&&(非)聚簇索引 && 索引操作
android·数据库·sql·mysql·adb·数据库架构
2025年一定要上岸1 小时前
【Django】-6- 登录用户身份鉴权
数据库·django·sqlite
奋进的孤狼2 小时前
【Java】在一个前台界面中动态展示多个数据表的字段及数据
java·数据库·oracle