mysql自带的一些函数功能也是很强大的,这里整理了一下时间方面的
获取当前时间格式串:
1#获取当前时间戳 2current_timestamp() yyyy-mm-dd hh:ii:ss 3now() yyyy-mm-dd hh:ii:ss 4curdate() yyyy-mm-dd 5current_date() 6curtime() hh:ii:ss 7current_time()
提取date各个字段
1#提取date各个字段 2date('yyyy-mm-dd hh:ii:ss') yyyy-mm-dd 3year('yyyy-mm-dd hh:ii:ss') yyyy 4month('yyyy-mm-dd hh:ii:ss') mm 5day('yyyy-mm-dd hh:ii:ss') dd
提取time各个字段
1#提取time各个字段 2time('yyyy-mm-dd hh:ii:ss') hh:ii:ss 3hour('yyyy-mm-dd hh:ii:ss') hh 4minute('yyyy-mm-dd hh:ii:ss') ii 5second('yyyy-mm-dd hh:ii:ss') ss
获取当前或者某一时间的unix时间戳
1#unix时间戳1970-01-01以来的秒数 2unix_timestamp() 3#同时还可以将某一时间格式串的秒数转化出来 4unix_timestamp('yyyy-mm-dd hh:ii:ss')
格式化时间串和格式化时间戳
1#格式化时间串 date_format 与 time_format 为同一函数 输入为 2date_format(now(), '%Y-%m-%d %T'); 3time_format(now(), '%H:%i:%s'); 4 5#格式化时间戳 将时间戳转化为时间格式串 6from_unixtime(unix_timestamp(), "%Y-%m-%d %T")
datetime 类型 与 timestamp 类型的比较
timestamp类型的列可以设置 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 等特殊属性
而 datetime 作为时间格式无法设置当前时间为其默认值,因为mysql不允许函数作为默认值定义,即 default now()是无效的 ,其他的时间格式还有 YEAR DATE TIME
1datetime YYYY-mm-dd HH:ii:ss '1000-01-01 00:00:00'到'9999-12-31 23:59:59' 8字节 2timestamp YYYY-mm-dd HH:ii:ss '1970-01-01 00:00:00'到'2037-12-31 23:59:59' 4字节
date_add() date_sub() interval
对于时间戳直接加值就可以进行时间平移,但对于时间格式串的加减我们可以使用 INTERVAL expr TYPE
TYPE是指跨度单位:
MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER【四分之一年】 YEAR
还有
1SECOND_MICROSECOND 2MINUTE_MICROSECOND 3MINUTE_SECOND 4HOUR_MICROSECOND 5#"5:20:15" 5小时20分15秒的步进量 6HOUR_SECOND 7#"5:20" 5小时20分的步进量 8HOUR_MINUTE 9DAY_MICROSECOND 10DAY_SECOND 11DAY_MINUTE 12DAY_HOUR 13#"0001-02"1年零2个月的步进量 14YEAR_MONTH 15 16#+- 参照点 间隔度 17#当前时间加5天 18date_add(now(), interval 5 DAY) 19#当前时间减5天 20date_sub(now(), interval 5 DAY) 21#加5天2小时10分钟20秒 22date_add(now(), interval "05 02:10:20" DAY_SECOND); 23#加1年2个月 24date_add(now(), interval "0001-02" YEAR_MONTH); 25#当然也可以直接用运算符 26select now() + interval 5 DAY, now() - interval 5 DAY 27#换成时间戳的运算是 28select unix_timestamp() + 5*24*60*60, unix_timestamp() - 5*24*60*60
extract()从时间格式串中提取时间
1#提取天 2select extract(DAY from now()); 3#提取天 小时 分钟 秒 4select extract(DAY_SECOND from now());
datediff()返回两个时间点相差的天数
1#-5天 只会计算天数 2select datediff(now(), now() + interval 5 day);