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;
相关推荐
君的名字13 分钟前
怎么判断一个Android APP使用了Qt 这个跨端框架
android·开发语言·qt
petunsecn42 分钟前
MySql添加非空字段时的“伪空”问题
数据库·mysql
小传blog1 小时前
解决PLSQL工具连接Oracle后无法使用ODBC导入器问题
数据库·oracle
小L爱科研1 小时前
7.6/Q1,GBD数据库最新文章解读
数据库·数据分析·逻辑回归·线性回归·健康医疗
Code哈哈笑1 小时前
【基于SpringBoot的图书购买系统】深度讲解 分页查询用户信息,分析前后端交互的原理
java·数据库·spring boot·后端·spring·交互
kingwebo'sZone1 小时前
sqlite的拼接字段的方法(sqlite没有convert函数)
java·数据库·sqlite
xzkyd outpaper2 小时前
Android中Framework用到了哪些跨进程通信方式
android·计算机八股
珹洺2 小时前
计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度
android·java·数据库
simple_whu3 小时前
使用SQLite Expert个人版VACUUM功能修复数据库
数据库·sqlite
fictionist4 小时前
正则表达式篇
linux·运维·服务器·数据库·mysql·正则表达式·c#