有时候会用到mysql里面的时间转换,时间日期计算什么的,就记录下,以备用,腾空脑子打游戏,懒人记录本,不喜勿喷,欢迎留言添加和改善.
1. 时间日期-字符串-时间戳long 之间的相互转换
1.1 时间(Date) ==>
1.1.1 date to string
select date_format(now(), '%Y-%m-%d %H:%i:%s') ==> 2018-05-25 02:12:16
1.1.2 date ro bigint
select unix_timestamp(now()) ==> 1527214408
select (unix_timestamp(now())*1000) ==> 1527214793000
1.2 字符串(varchar) ==>
1.2.1 string to date
select str_to_date('2016-01-02 10:14:58', '%Y-%m-%d %H:%i:%s') ==> 2016-01-02 10:14:58
1.2.2 string to bigint
select unix_timestamp('2016-01-02 10:14:58') ==> 1451729698
1.3 时间戳(long) ==>
13.1
long to date
select from_unixtime(1451729698) ==> 2016-01-02 10:14:58
select from_unixtime(1451729698123/1000) ==> 2016-01-02 10:14:58.1230 毫秒
1.3.2
long to string
select from_unixtime(1451729698,'%Y-%m-%d %H:%i:%s') ==> 2016-01-02 10:14:58
2. 俩日期之间的时间差计算
方法很多,我就只记录最方便的,太多的方法啊,参数什么的记不住,也没必要记
2.1 计算时间差 year(年) month(月) day(天) hour(时) minute(分) second(秒)
select
timeStampDiff(second, "2014-01-12 23:23:56","2015-01-12 23:23:56") ==> 31536000(单位:秒,其他单位按需选取就是)
select timeStampDiff(month, "2016-01-12 23:23:56","2015-01-12 23:23:56") ==>
-12 (记住:是后一个减去前一个)
3. 按需求来(真的不擅长表达)
3.1 天数
3.1.1 查询创建时间在30天以内的数据
1). select * from t_msgcenter_message where timeStampDiff(month, from_unixtime(create_time/1000),now())
<=30
模型: select * from table where timeStampDiff(month,create_time,now())<=30 ==> 不算时间转换
2). select * from table where to_days(now())-to_days(create_time) <=30
3.1.2 查询在2018.03这个月的数据
3.1.2.1 select * from product where date(add_time) between '2013-01-01' and '2013-01-31'
3.1.2.2 select * from product where Year(add_time) = 2013 and Month(add_time) = 1
暂时两种方式,请随意
返回星期,月份,季度啥的懒得整理了,用的不多;另外,数据库本地时间和网络时间一般会不一样,插入创建或更新时间时,一是设置数据库时间与网络时间同步,使用now()方法.插入现在时间,格式按需转换;二是在代码里获取时间再插入数据,哪种方便请随意,有更好的方法欢迎留言,大家一起探讨,开卷有益,开辩有益.