文章目录
- 时间类型
- 1.1 datetime 时间日期 格式是YYYY-mm-dd HH:ii:ss 表示的范围是从1000到9999年。有0值,0000-00-00 00:00:00
- 1.2 date 日期 就是datetime中date部分
- 1.3 time 时间(段)指定的某个区间之间
- 1.4 timestamp 时间戳,格式不是时间戳,只是从1970年开始的YYYY-mm-ddHH:ii:ss 格式 与datetime完全一致。
- 1.5 year 年份
- 2 当前时间
- 2.1now 返回当前系统的日期+时间
- 2.2curdate 返回当前系统日期,不包含时间
- 2.3curtime() 返回当前时间,不包含日期
- 3 可以获取指定的部分,年、月、日、小时、分钟、秒
- 3.1 年
- 3.2 月
- 3.3 日 day
- 3.4 小时 hour
- 3.5 分钟 minute
- 3.6 秒 second
- 4 str_to_dat()和date_format()
- 4.1 str_to_dat()
- 4.2 date_ format
- 5 事例:
- 6 前14天,时间戳转日期,查毫秒差:
时间类型
1.1 datetime 时间日期 格式是YYYY-mm-dd HH:ii:ss 表示的范围是从1000到9999年。有0值,0000-00-00 00:00:00
1.2 date 日期 就是datetime中date部分
1.3 time 时间(段)指定的某个区间之间
1.4 timestamp 时间戳,格式不是时间戳,只是从1970年开始的YYYY-mm-ddHH:ii:ss 格式 与datetime完全一致。
1.5 year 年份
2060 年 和1970 年 >70是1900 <70 是2000timestamp 字段:只要当前所在的记录被更新,该字段一定回自动更新当前时间。
2 当前时间
2.1now 返回当前系统的日期+时间
select now()
2.2curdate 返回当前系统日期,不包含时间
select CURDATE();
2.3curtime() 返回当前时间,不包含日期
select curtime();
3 可以获取指定的部分,年、月、日、小时、分钟、秒
3.1 年
select year(now()) 年;
select year(‘1998-1-1’) 年;
select year(hiredate) 年 from employees;
3.2 月
select month(now()) 月
select monthname(now()) 月;
3.3 日 day
3.4 小时 hour
3.5 分钟 minute
3.6 秒 second
4 str_to_dat()和date_format()
4.1 str_to_dat()
select str_to_date(‘1998-3-2’,’%Y-%c-%d’) as out_put
实际例子: 查询入职日期为1992-4-3 的员工信息
select * from employee where hiredate = ’ 1992-4-3’ ;
select * from employee where hiredate = ’ 4-3 1992‘ ; 就找不到了==》需要进行转换
select * from employee where hiredate = str_to_date(‘4-3 1992’,’%c-%d %Y’);
4.2 date_ format
select date_format(now(),’%y年%m月%d日’) as out_put
查询有奖金的员工名和入职日期(xx月/XX 日 XX年)
select last_name,date_format(hiredate,’%m月/%d日 %y年’) 入职日期
from employees where comnission_pct is not null;
5 事例:
1、获取当月的每天数据总量:
SELECT
count(1) AS 别名,
DAY(时间字段名) as 别名
FROM
表名
WHERE MONTH(时间字段名) = MONTH( NOW( ) )
GROUP BY DAY(时间字段名)
select count(*) ,day(create_time) day from order_master where month(create_time)= month(NOW()) group by day(create_time)
2、获取前月的每天数据总量:
SELECT
count(1) AS 别名,
DAY(时间字段名) as 别名
FROM
表名
WHERE MONTH(时间字段名) = MONTH( NOW( ) )-1
GROUP BY DAY(时间字段名)
3、获取去年的每月数据总量:
SELECT
count(1) AS 别名,
MONTH(时间字段名) as 别名
FROM
表名
WHERE YEAR(时间字段名 ) = YEAR( NOW( ) )-1
GROUP BY MONTH(时间字段名)
4、获取今年的每月数据总量:
SELECT
count(1) AS 别名,
MONTH(时间字段名) as 别名
FROM
表名
WHERE YEAR(时间字段名 ) = YEAR( NOW( ) )
GROUP BY MONTH(时间字段名)
6 前14天,时间戳转日期,查毫秒差:
Mysql中使用sql语句查询前一个天、前一周、前一月时间的方法
前14天
在数据库总存的试varchar的时间例如;2019-11-18 01:42:08
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 14 DAY) <= date(时间字段名)
最近两周:
SELECT * FROM 表名 where date_sub(CURDATE(),INTERVAL (WEEKDAY(CURDATE()) +7) day) <= DATE(时间字段名)
(WEEKDAY(date) 返回 date 的星期索引(0 = Monday, 1 = Tuesday, … 6 = Sunday):
mysql> SELECT WEEKDAY(’1998-02-03 22:23:00’);
)
时间戳转日期:
FROM_UNIXTIME(updatetime)
日期转时间戳;
UNIX_TIMESTAMP(updatetime)
select *,UNIX_TIMESTAMP(create_time)from order_master
查毫秒差:
UNIX_TIMESTAMP(updatetime)-UNIX_TIMESTAMP(timestamp)
时间格式化:
date_format( timestamp, ‘%Y%m’ ));
DATE_FORMAT将传来的Date类型转为自己需要的格式,如%Y-%m-%d %H:%i:%s会将传来的startTime和endTime转为"yyyy-MM-dd HH:mm:ss"格式
select * from tableName a
where a.time between DATE_FORMAT(#{startTime},’%Y-%m-%d %H:%i:%s’) and DATE_FORMAT(#{endTime},’%Y-%m-%d %H:%i:%s’)
https://www.jianshu.com/p/593ace0424ff
注:
SELECT
id,
DATE_FORMAT(create_time, ‘%Y-%c-%e’)
FROM epc_mes_item
WHERE DATE_FORMAT(create_time, ‘%Y-%c-%d’) >= ‘2018-11-19’;
0查询’2020-01-10的数据
select * from order_master where DATE_FORMAT(create_time,’%Y-%m-%d’) = ‘2020-01-10’
查看 ‘2020-01-09’ 到 ‘2020-01-11’的数据
select * from order_master where DATE_FORMAT(create_time,’%Y-%m-%d’) between ‘2020-01-09’ and ‘2020-01-11’
==========================
需求:
写个sql 查询 smslog表 要有手机号 发送内容 插入时间 插入时间和更新时间的时间差以秒为单位 查询最近两星期的
sql:
select mobile,content,msgid,timestamp,updatetime,
UNIX_TIMESTAMP(updatetime)-UNIX_TIMESTAMP(timestamp) time from smslog where date_sub(CURDATE(),INTERVAL (WEEKDAY(CURDATE()) +7) day) <= DATE(timestamp) order by timestamp desc;