单行函数*

这篇博客深入探讨了SQL中的各种函数,包括数值函数、字符串函数、日期和时间函数、流程控制函数以及加密与解密函数。从基础的数学运算到复杂的日期操作,再到数据安全,全面展示了SQL函数的强大功能。此外,还介绍了获取MySQL信息的相关函数,对于数据库管理和开发极具参考价值。
摘要由CSDN通过智能技术生成

目录

一、什么是函数?

⚪函数的分类

两种SQL函数

⚪单行函数

二、数值函数

1.基本函数

单行函数可以嵌套

2.角度与弧度互换函数

3.三角函数

​4.指数和对数

​①指数

②对数 

5.进制间的转换

三、字符串函数

1.测试1 :ASCII CHAR_LENGTH LENGTH

​2.测试2:CONCAT CONCAT_WS

​3.测试3 :INSERT,REPLACE

四、日期和时间函数

1.  获取日期、时间

2.日期与时间戳的转换

①UNIX_TIMESTAMP()

②UNIX_TIMESTAMP

③FROM_UNIXTIME

3.获取月份、星期、星期数、天数等函数

4.日期的操作函数

🐟EXTRACT(type FROM date)函数中type的取值与含义:

5.时间和秒钟转换的函数

6. 计算日期和时间的函数

第①组

第②组 

7.日期的格式化与解析 

①上述非GET_FORMAT 函数中fmt参数常用的格式符:  

②GET_FORMAT函数中date_type和format_type参数取值如下:

(1)格式化

​(2)解析 :格式化的逆过程

五、流程控制函数

六、加密与解密函数

七、 MySQL信息函数 

​八、其它函数


一、什么是函数?

函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?

它可以把我们经常使用的代码封装起来, 需要的时候直接调用即可。这样既提高了代码效率 ,又提高了可维护性 。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率

⚪函数的分类

从函数定义的角度出发,我们可以将函数分成 内置函数 自定义函数 。在 SQL 语言中,同样也包括了内置函数和自定义函数。

内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的

两种SQL函数

⚪单行函数

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

二、数值函数

1.基本函数

SELECT ABS(-123),ABS(32),SIGN(43),PI(),CEIL(32.32),CEILING(-32.32),FLOOR(32.32)
FROM DUAL;

SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1)
FROM DUAL;

SELECT
ROUND(12.33),ROUND(12.343,2),ROUND(12.324,-1),TRUNCATE(12.66,1),TRUNCATE(12.66,-1)
FROM DUAL;

单行函数可以嵌套

SELECT TRUNCATE(ROUND(123.456,2),0)
FROM DUAL;

2.角度与弧度互换函数

SELECT RADIANS(30),RADIANS(60),RADIANS(90),
DEGREES(2*PI()),DEGREES(RADIANS(90))
FROM DUAL;

3.三角函数

SELECT SIN(RADIANS(30)),DEGREES(ASIN(1)),TAN(RADIANS(45)),DEGREES(ATAN(1))
FROM DUAL;

4.指数和对数

①指数

SELECT POW(2,5),POW(2,-1),POW(4,-2),EXP(2)
FROM DUAL;

  

②对数 

SELECT LN(EXP(2))
FROM DUAL;

5.进制间的转换

SELECT BIN(10),HEX(10),OCT(10),CONV(10,10,8)
FROM DUAL;

三、字符串函数

注意:MySQL中,字符串的位置是从1开始的。 

1.测试1 :ASCII CHAR_LENGTH LENGTH

SELECT ASCII('Abcvbn'),CHAR_LENGTH('HELLO'),CHAR_LENGTH('你好'),LENGTH('HELLO'),LENGTH('你好')
FROM DUAL;

2.测试2:CONCAT CONCAT_WS

SELECT CONCAT(e.last_name,' welcome ',' to ',l.city)
FROM employees e JOIN locations l;
SELECT CONCAT_WS('-','HELLO','WORLD','HELLO','XI\'AN')
FROM DUAL;

3.测试3 :INSERT,REPLACE

#将字符串HELLOWORLD从第2位置开始,3个字符长的子串替换为字符串aaaaa

SELECT INSERT('HELLOWORLD',2,3,'aaaaa')
FROM DUAL;

SELECT REPLACE('hello','ll','mmm')
FROM DUAL;

四、日期和时间函数

1.  获取日期、时间

SELECT CURDATE(),CURRENT_DATE(),CURTIME(),NOW(),SYSDATE(),
UTC_DATE(),UTC_TIME()
FROM DUAL;

2.日期与时间戳的转换

①UNIX_TIMESTAMP()

以UNIX时间戳的形式返回当前时间。 

SELECT UNIX_TIMESTAMP()
FROM DUAL;

 

②UNIX_TIMESTAMP

将时间date以UNIX时间戳的形式返回。 

SELECT UNIX_TIMESTAMP('2022-2-22 22:22:22')
FROM DUAL;

 

③FROM_UNIXTIME

将UNIX时间戳的时间转换为普通格式的时间

SELECT FROM_UNIXTIME(1644726483)
FROM DUAL;

  

3.获取月份、星期、星期数、天数等函数

SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()),
HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE())
FROM DUAL;

 

SELECT MONTHNAME('2022-2-22'),DAYNAME('2022-2-22'),WEEKDAY('2022-2-22'),
QUARTER(CURDATE()),WEEK(CURDATE()),DAYOFYEAR(NOW()),
DAYOFMONTH(NOW()),DAYOFWEEK(NOW())
FROM DUAL;

4.日期的操作函数

🐟EXTRACT(type FROM date)函数中type的取值与含义:

SELECT EXTRACT(SECOND FROM NOW()),EXTRACT(DAY FROM NOW()),
EXTRACT(HOUR_MINUTE FROM NOW()),#1244:12:44
EXTRACT(QUARTER FROM NOW()) #获取季度
FROM DUAL;

5.时间和秒钟转换的函数

SELECT TIME_TO_SEC(CURTIME()),
SEC_TO_TIME(46066)
FROM DUAL;

  

6. 计算日期和时间的函数

第①组

SELECT NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR)#在现在时间的基础上增加一年
FROM DUAL;

SELECT DATE_ADD(NOW(),INTERVAL 1 DAY) AS col1,DATE_ADD('2022-2-22 22:22:22',INTERVAL 1 SECOND) AS col2,
ADDDATE('2022-2-22 22:22:22',INTERVAL 1 SECOND) AS col3,
DATE_ADD('2022-2-22 22:22:22',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('2022-2-22',INTERVAL 31 DAY) AS col1,
SUBDATE('2022-2-22',INTERVAL 31 DAY) AS col2,
DATE_SUB('2022-2-22 22:22:22',INTERVAL '1 1' DAY_HOUR) AS col3
FROM DUAL;

第②组 

SELECT
ADDTIME(NOW(),20),SUBTIME(NOW(),30),
SUBTIME(NOW(),'1:1:3'),
DATEDIFF(NOW(),'2022-2-22'),
TIMEDIFF(NOW(),'2022-2-22 22:22:22'),
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;

7.日期的格式化与解析 

  • 格式化:日期 ————> 字符串
  • 解   析:字符串 ————> 日期

此时我们所说的是日期的显式格式化和解析,之前所接触的是日期的隐式格式化或解析

SELECT *
FROM employees
WHERE hire_date = '1993-01-13';

'  '中的写法必须与原日期格式相同才能查询出来,年月日不可颠倒

①上述非GET_FORMAT 函数中fmt参数常用的格式符:  

②GET_FORMAT函数中date_type和format_type参数取值如下:

(1)格式化

SELECT 
DATE_FORMAT(CURDATE(),'%Y-%M-%D') AS DATE1,
DATE_FORMAT(NOW(),'%Y-%m-%d') AS DATE2,
TIME_FORMAT(CURTIME(),'%H:%i:%S') AS DATE3,
TIME_FORMAT(CURTIME(),'%h:%i:%S') AS DATE4,
DATE_FORMAT(NOW(),'%Y-%M-%D %h:%i:%S %W %w %T %r') AS DATE5
FROM DUAL;

(2)解析 :格式化的逆过程

 

SELECT STR_TO_DATE('2022-February-13th 03:11:05 Sunday 0 15:11:05',
'%Y-%M-%D %h:%i:%S %W %w') AS RESULT
FROM DUAL;

 

SELECT GET_FORMAT(DATE, 'USA')
FROM DUAL;

 

SELECT DATE_FORMAT(CURDATE(),GET_FORMAT(DATE, 'USA'))
FROM DUAL;

 

五、流程控制函数

流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。

MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。

#例1
SELECT last_name,salary,IF(salary > 6000,'高工资','低工资') "details"
FROM employees;

#例2
SELECT employee_id,salary, CASE WHEN salary>=15000 THEN '高薪'
WHEN salary>=10000 THEN '潜力股'
WHEN salary>=8000 THEN '屌丝'
ELSE '草根' END "描述"
FROM employees;

#例3
SELECT oid,`status`, CASE `status` WHEN 1 THEN '未付款'
WHEN 2 THEN '已付款'
WHEN 3 THEN '已发货'
WHEN 4 THEN '确认收货'
ELSE '无效订单' END
FROM t_order;

六、加密与解密函数

加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在保证数据库安全时非常有用。

🐟可以看到ENCODE(value,password_seed)函数与DECODE(value,password_seed)函数互为反函数。 

SELECT PASSWORD('MySQL')  #PASSWORD在MySQL 8.0中弃用
FROM DUAL; 

SELECT MD5('MySQL'),SHA('MySQL')
FROM DUAL; 

注:PASSWORD & SHA 加密是不可逆的 

七、 MySQL信息函数 

MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作

SELECT VERSION(),#版本号
CONNECTION_ID(),#连接ID
DATABASE(),SCHEMA(),USER(),CURRENT_USER(),
CHARSET('中国'),COLLATION('中国')
FROM DUAL;

八、其它函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

elk-zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值