mysql(22/2/23)
一.日期时间函数
//返回当前时间
SELECT CURRENT_TIME()FROM DUAL
//返回当前日期
SELECT CURRENT_DATE()FROM DUAL
SELECT NOW()FROM DUAL
//返回当前时间戳
SELECT CURRENT_TIMESTAMP()FROM DUAL
实例
create table mes(
id int,
content varchar(30),
send_time datetime
);
select * from `mes`
insert into mes
values(1,'北京新闻',current_timestamp()
);
返回datetime类型的date
SELECT DATE(send_time) FROM mes;
DATE_ADD(time,INTERVAL add_time time_type)查询time加上add_time的总和
年月日时分秒
INTERVAL add_time YEAR
INTERVAL add_time MONTH
INTERVAL add_time DATE
INTERVAL add_time HOUR
INTERVAL add_time MINUTE
INTERVAL add_time SECOND
DATE_SUB(time,INTERVAL add_time time_type)查询time减去add_time的总和
查询时间10分钟内的信息
SELECT *FROM mes WHERE DATE_ADD(send_time,INTERVAL 10 MINUTE) >=NOW();
datedeft(date1,date2)查询date1和date2的相差天数所以必须是date单位date1-date2
SELECT DATEDIFF(DATE(send_time),DATE(send_time) ) FROM mes
!!!问你是1986-11-11出生你能活到80岁你能活多少天
SELECT ABS(DATEDIFF('1986-11-11',DATE_ADD('1986-11-11',INTERVAL 80 YEAR) )) FROM mes
时间相差TIMEDIFF(time1,time2) —time1-time2
SELECT TIMEDIFF('11:10:10','10:10:9') FROM DUAL
daytime的年月日时分秒拆解
SELECT NOW() ,YEAR(NOW()), MONTH(NOW()),DAY(NOW()),HOUR(NOW()),MINUTE(NOW()),
SECOND(NOW())FROM DUAL
unix_timestamp()返回1970-1-1 00:00:00到现在的秒数
SELECT UNIX_TIMESTAMP() FROM DUAL
将一个Unix_timestamp()的数据或者一个秒数据转化为指定格式
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%y-%m-%d %H:%i:%s')
//字母大小会影响结果M大写是英文月小写是中文
//y小写是后两位大写是所有显示
//H大写是24小时小写是12小时
select from_unixtime('1644564','%y-%m-%d %H:%i:%s')
*在实际开发中经常用int来保存一个UNix_timestamp的时间戳用fron_unixtime转换*
加密函数和系统函数
*user()可以查看登陆到mysql有那些用户以及登陆的ip*
SELECT USER() FROM `students`
#查询当前使用数据库名称
SELECT DATABASE() FROM `students`
#MD5(str)为用户算出一个str 加密的32位字符串
#一个安全的密码加密函数
SELECT MD5('我吃苹果不吃梨')FROM DUAL
CREATE TABLE `employee1`(id INT,
`name` VARCHAR(8) NOT NULL DEFAULT '',
pwd CHAR(32)NOT NULL DEFAULT '')
SELECT * FROM `employee1`
INSERT INTO `employee1` VALUES(1,'mark',MD5('woaini'))
SELECT * FROM `employee1` WHERE `name`='hsp' AND `pwd`=MD5('woaini')
#password(str)也是一种加密函数而且是mysql的加密方式
流程控制函数
#IF(e1,e2,e3)如果e1是真的返回e2否则返回e3
SELECT IF(TRUE,'北京','上海')
#IFNULL(e1,e2)如果e1是空返回e2不为空就是e1
SELECT IFNULL(NULL,'a') FROM DUAL
#CASE WHEN A THEN B WHEN C THEN D ELSE E END如A是真返回B
#A假看C真是D不真就是E
SELECT CASE
WHEN TRUE THEN 'b'
WHEN FALSE THEN 'c'
ELSE 'a' END
#判断是否为空用 is null
#is not null
SELECT `name`,(SELECT CASE
WHEN `bumen` ='三国' THEN '军人'
WHEN `bumen`='水浒' THEN '好汉'
ELSE '老师' END)AS '格局'
FROM `students`
sql表的查询----加强
在mysql中日期是可以直接比较的
where date >'1998-10-18'
//模糊查询
like '王%' //%代表多个字符
like '王_' _代表一个字符
//判断是否为空用
is null
判断等于字符串用
=
order by排序默认(asc)升序后加desc降序 – 方向为自伤向下
排序再排序先按部门升序再按工资降序
select * from `emp` order by `deptno` asc ,sal desc;
分页查询
从start+1行显示rows行
SELECT * FROM `students` ORDER BY id LIMIT START,ROWS;第二页是为start+rows rows不变
多表查询
#统计各个部门的平均工资并是大于1000的平均工资按照从高到低排列并
#取出前两行
select deptno ,avg(salary) from `ems`
group by deptno having avg(salary) > '1000'
order by avg(salary) desc
limit 0 ,2
多子句查询
所有的过滤选择都是针对行的选好行后才取显示select后面的列数据,所以sql是从后向前执行的思路