mysql 时间日期(date)相关: 格式转换,时间差计算等

有时候会用到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()方法.插入现在时间,格式按需转换;二是在代码里获取时间再插入数据,哪种方便请随意,有更好的方法欢迎留言,大家一起探讨,开卷有益,开辩有益.

你可能感兴趣的:(数据库/mysql)