1. 时间日期相关函数
- CURRENT_DATE() 当前日期
- CURRENT_TIME() 当前时间
- CURRENT_TIMESTAMP() 当前时间戳
- DATE (datetime) 返回datetime的日期部分
- DATE_ADD (date2 , INTERVAL d_value d_type) 在date2中加上日期或时间
- DATE_SUB (date2 , INTERVAL d_value d_type) 在date2上减去一个时间
- DATEDIFF (date1,date2 ) 两个日期差(结果是天)
- TIMEDIFF(date1,date2) 两个时间差(多少小时多少分钟多少秒)
- Now () 当前时间
- YEAR|Month[DATE (datetime ) FROM_UNIXTIME() 年月日
-- 日期时间相关函数
-- CURRENT_DATE ( ) 当前日期
SELECT CURRENT_DATE() FROM DUAL;
-- CURRENT_TIME ( ) 当前时间
SELECT CURRENT_TIME() FROM DUAL;
-- CURRENT_TIMESTAMP ( ) 当前时间戳
SELECT CURRENT_TIMESTAMP() FROM DUAL;
-- 创建测试表 信息表
CREATE TABLE mes(
id INT ,
content VARCHAR(30),
send_time DATETIME);
-- 添加一条记录
INSERT INTO mes
VALUES(1, '北京新闻', CURRENT_TIMESTAMP());
INSERT INTO mes VALUES(2, '上海新闻', NOW());
INSERT INTO mes VALUES(3, '广州新闻', NOW());
SELECT * FROM mes;
SELECT NOW() FROM DUAL;
-- 上应用实例
-- 显示所有新闻信息,发布日期只显示 日期,不用显示时间.
SELECT id, content, DATE(send_time)
FROM mes;
-- 请查询在10分钟内发布的新闻, 思路一定要梳理一下.
SELECT *
FROM mes
WHERE DATE_ADD(send_time, INTERVAL 10 MINUTE) >= NOW()
SELECT *
FROM mes
WHERE send_time >= DATE_SUB(NOW(), INTERVAL 10 MINUTE)
-- 请在mysql 的sql语句中求出 2011-11-11 和 1990-1-1 相差多少天
SELECT DATEDIFF('2011-11-11', '1990-01-01') FROM DUAL;
-- 请用mysql 的sql语句求出你活了多少天? [练习] 1986-11-11 出生
SELECT DATEDIFF(NOW(), '2002-10-24') FROM DUAL;
-- 如果你能活80岁,求出你还能活多少天.[练习] 1986-11-11 出生
-- 先求出活80岁 时, 是什么日期 X
-- 然后在使用 datediff(x, now()); 1986-11-11->datetime
-- INTERVAL 80 YEAR : YEAR 可以是 年月日,时分秒
-- '1986-11-11' 可以date,datetime timestamp
SELECT DATEDIFF(DATE_ADD('1986-11-11', INTERVAL 80 YEAR), NOW())
FROM DUAL;
SELECT TIMEDIFF('10:11:11', '06:10:10') FROM DUAL;
-- YEAR|Month|DAY| DATE (datetime )
SELECT YEAR(NOW()) FROM DUAL;
SELECT MONTH(NOW()) FROM DUAL;
SELECT DAY(NOW()) FROM DUAL;
SELECT MONTH('2013-11-10') FROM DUAL;
-- unix_timestamp() : 返回的是1970-1-1 到现在的秒数
SELECT UNIX_TIMESTAMP() FROM DUAL;
-- FROM_UNIXTIME() : 可以把一个unix_timestamp 秒数[时间戳],转成指定格式的日期
-- %Y-%m-%d 格式是规定好的,表示年月日
-- 意义:在开发中,可以存放一个整数,然后表示时间,通过FROM_UNIXTIME转换
--
SELECT FROM_UNIXTIME(1618483484, '%Y-%m-%d') FROM DUAL;
SELECT FROM_UNIXTIME(1618483100, '%Y-%m-%d %H:%i:%s') FROM DUAL;
SELECT * FROM mysql.user \G


2.加密函数
- USER() 查询用户
- DATABASE() 数据库名称
- MD5(str) 为字符串算出一个 MD5 32的字符串,(用户密码)加密
- PASSWORD(str) select * from mysql.user NG 从原文密码str 计算并返回密码字符串,通常用于对mysql 数据库的用户密码加密
- 基本使用
mysql> create table users(id int , name varchar(32) not null defaul ", pwd char(32) not null default ‘’); 添加一个用户名.
-- 演示加密函数和系统函数
-- USER() 查询用户
-- 可以查看登录到mysql的有哪些用户,以及登录的IP
SELECT USER() FROM DUAL; -- 用户@IP地址
-- DATABASE() 查询当前使用数据库名称
SELECT DATABASE();
-- MD5(str) 为字符串算出一个 MD5 32的字符串,常用(用户密码)加密
-- root 密码是 hsp -> 加密md5 -> 在数据库中存放的是加密后的密码
SELECT MD5('demo') FROM DUAL;
SELECT LENGTH(MD5('demo')) FROM DUAL;
-- 演示用户表,存放密码时,是md5
CREATE TABLE demo_user
(id INT ,
`name` VARCHAR(32) NOT NULL DEFAULT '',
pwd CHAR(32) NOT NULL DEFAULT '');
INSERT INTO demo_user
VALUES(100, '张飞', MD5('hsp'));
SELECT * FROM demo_user;
SELECT * FROM demo_user -- SQL注入问题
WHERE `name`='张飞' AND pwd = MD5('hsp')
-- PASSWORD(str) -- 加密函数, MySQL数据库的用户密码就是 PASSWORD函数加密
SELECT PASSWORD('demo') FROM DUAL; -- 数据库的 *81220D972A52D4C51BB1C37518A2613706220DAC
-- select * from mysql.user \G 从原文密码str 计算并返回密码字符串
-- 通常用于对mysql数据库的用户密码加密
-- mysql.user 表示 数据库.表
SELECT * FROM mysql.user

3.流程控制函数
- "IF(expri,expr2,expr3)
如果expr1为True ,则返回 expr2 否则返回 expr3.- IFNULL(exprl,expr2)
如果expr1不为空NULL,则返回expr1,否则返回 lexpr2]- SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expi4 ELSE exprs END;[类似多重分支.」
如果expr1 为TRUE,则返回expr2,如果expr2 为t,返回 expr4,否则返回 expr5
# 演示流程控制语句
# IF(expr1,expr2,expr3) 如果expr1为True ,则返回 expr2 否则返回 expr3
SELECT IF(TRUE, '北京', '上海') FROM DUAL;
# IFNULL(expr1,expr2) 如果expr1不为空NULL,则返回expr1,否则返回expr2
SELECT IFNULL( NULL, 'demo龙') FROM DUAL;
SELECT IFNULL( 'demo龙', NULL) FROM DUAL;
# SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5 END; [类似多重分支.]
# 如果expr1 为TRUE,则返回expr2,如果expr2 为t, 返回 expr4, 否则返回 expr5
SELECT CASE
WHEN TRUE THEN 'jack' -- jack
WHEN FALSE THEN 'tom'
ELSE 'mary' END
-- 1. 查询emp 表, 如果 comm 是null , 则显示0.0
-- 老师说明,判断是否为null 要使用 is null, 判断不为空 使用 is not
SELECT ename, IF(comm IS NULL , 0.0, comm)
FROM emp;
SELECT ename, IFNULL(comm, 0.0)
FROM emp;
-- 2. 如果emp 表的 job 是 CLERK 则显示 职员, 如果是 MANAGER 则显示经理
-- 如果是 SALESMAN 则显示 销售人员,其它正常显示
SELECT ename, (SELECT CASE
WHEN job = 'CLERK' THEN '职员'
WHEN job = 'MANAGER' THEN '经理'
WHEN job = 'SALESMAN' THEN '销售人员'
ELSE job END) AS 'job'
FROM emp;
SELECT * FROM emp;
SELECT * FROM dept;
SELECT * FROM salgrade;

本文详细介绍了MySQL中关于时间日期的相关函数,如CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP(), DATE_ADD(), DATE_SUB(), DATEDIFF()等,并通过示例展示了如何使用这些函数进行日期时间的计算。此外,还讲解了流程控制函数,如IF(), IFNULL(), CASE WHEN...END等,以及它们在实际查询中的应用。文章还涵盖了用户密码的加密方法,如MD5()和PASSWORD()函数,以及在数据库中安全存储密码的方法。
574

被折叠的 条评论
为什么被折叠?



