文章目录

  • 时间类型
  • 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 年份

zabbix 数据库日期格式 数据库日期时间_字段名

zabbix 数据库日期格式 数据库日期时间_表名_02


2060 年 和1970 年 >70是1900 <70 是2000timestamp 字段:只要当前所在的记录被更新,该字段一定回自动更新当前时间。

zabbix 数据库日期格式 数据库日期时间_时间戳_03

2 当前时间

2.1now 返回当前系统的日期+时间

select now()

2.2curdate 返回当前系统日期,不包含时间

select CURDATE();

2.3curtime() 返回当前时间,不包含日期

select curtime();

3 可以获取指定的部分,年、月、日、小时、分钟、秒

3.1 年

select year(now()) 年;

select year(‘1998-1-1’) 年;

zabbix 数据库日期格式 数据库日期时间_时间戳_04


select year(hiredate) 年 from employees;

3.2 月

select month(now()) 月

zabbix 数据库日期格式 数据库日期时间_zabbix 数据库日期格式_05


select monthname(now()) 月;

zabbix 数据库日期格式 数据库日期时间_时间戳_06

3.3 日 day

3.4 小时 hour

3.5 分钟 minute

3.6 秒 second

4 str_to_dat()和date_format()

zabbix 数据库日期格式 数据库日期时间_zabbix 数据库日期格式_07


zabbix 数据库日期格式 数据库日期时间_zabbix 数据库日期格式_08

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’ ;

zabbix 数据库日期格式 数据库日期时间_zabbix 数据库日期格式_09


select * from employee where hiredate = ’ 4-3 1992‘ ; 就找不到了==》需要进行转换

select * from employee where hiredate = str_to_date(‘4-3 1992’,’%c-%d %Y’);

zabbix 数据库日期格式 数据库日期时间_zabbix 数据库日期格式_10

4.2 date_ format

select date_format(now(),’%y年%m月%d日’) as out_put

zabbix 数据库日期格式 数据库日期时间_时间戳_11


查询有奖金的员工名和入职日期(xx月/XX 日 XX年)

select last_name,date_format(hiredate,’%m月/%d日 %y年’) 入职日期

from employees where comnission_pct is not null;

zabbix 数据库日期格式 数据库日期时间_字段名_12

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)

zabbix 数据库日期格式 数据库日期时间_时间戳_13

日期转时间戳;
UNIX_TIMESTAMP(updatetime)

zabbix 数据库日期格式 数据库日期时间_字段名_14

select *,UNIX_TIMESTAMP(create_time)from order_master

zabbix 数据库日期格式 数据库日期时间_表名_15

查毫秒差:
UNIX_TIMESTAMP(updatetime)-UNIX_TIMESTAMP(timestamp)

zabbix 数据库日期格式 数据库日期时间_字段名_16

时间格式化:
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;