MySQL时间相减问题
来源:互联网 发布:知乎跳槽才能涨工资 编辑:程序博客网 时间:2024/05/24 03:37
这个问题2003年就有人在mysql4.0的版本时反馈,但mysql官方并不认为是bug,因为他们认为mysql并不支持时间直接相减操作,应该用专用函数处理,所以一直没有修正。但我认为这个很容易导致使用错误,要么就直接报错,要么显示正确的结果。
mysql的TIMESTAMPDIFF函数可以返回两个日期之间的时间差。 如下语法:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2);
参数:
unit 返回时间差的单位
datetime_expr1 日期
datetime_expr2 日期
时间单位如下:
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'
2.MySQL的unix_timestamp函数:
将时间转化为时间戳。(date 类型数据转换成 timestamp 形式整数)
没传时间参数则取当前时间的时间戳
+------------------+
| unix_timestamp() |
+------------------+
| 1361586358 |
+------------------+
1 row in set (0.01 sec)
mysql> select unix_timestamp('2013-01-01 10:10:10');
+---------------------------------------+
| unix_timestamp('2013-01-01 10:10:10') |
+---------------------------------------+
| 1357006210 |
+---------------------------------------+
1 row in set (0.00 sec)
2.from_unixtime
将timestamp 形式整数 转化为 date类型
mysql> select from_unixtime(1355272360);
+---------------------------+
| from_unixtime(1355272360) |
+---------------------------+
| 2012-12-12 08:32:40 |
+---------------------------+
1 row in set (0.00 sec)
当然也可以指定输出的时间格式:
mysql> select from_unixtime(1355272360,'%Y%m%d');
+------------------------------------+
| from_unixtime(1355272360,'%Y%m%d') |
+------------------------------------+
| 20121212 |
+------------------------------------+
3.关于mysql 时间戳的限制
目前timestamp 所能表示的范围在 1970 - 2038之间 。
超过这个范围 得到的时间将会溢出 得到的时间是null.
mysql> select from_unixtime(0);
+---------------------+
| from_unixtime(0) |
+---------------------+
| 1970-01-01 08:00:00 |
+---------------------+
mysql> select from_unixtime(2147483647);
+---------------------------+
| from_unixtime(2147483647) |
+---------------------------+
| 2038-01-19 11:14:07 |
+---------------------------+
1 row in set (0.00 sec)
time_to_sec()函数仅仅计算了时间部分的秒数,没有把年月日的秒数计算进去。因为这个特点,导致了我程序的一个bug。
这段代码本来想统计客服的响应时间。但是碰到这种极品数据的时候,例如, responseTime:2013-1-8 00:00:01 ,firstMsgTime: 2013-1-7 23:59:50,程序就返回负数了。
mysql时间函数——UNIX_TIMESTAMP(),这个函数返回的是自1970年以来的秒数。用这个函数才能正确的计算两个时间点的秒数差。
time_to_sec(time) 返回 time 参数,转换成秒。
mysql> SELECT TIME_TO_SEC('22:23:00');+---------------------------------------------------------+| TIME_TO_SEC('22:23:00') |+---------------------------------------------------------+| 80580 |+---------------------------------------------------------+1 row in set (0.00 sec)
- MySQL时间相减问题
- mysql时间相减的问题(bug)
- mysql时间相减的问题
- 关于Mysql时间相减问题的bug
- mysql 时间相减
- mysql sum() 时间问题
- mysql时间问题
- MYSQL 时间问题
- MySql的时间问题
- mysql两个时间相减
- MySQL时间插入的问题
- mysql 中时间运算问题
- mysql时间戳溢出问题
- mysql 查询时间条件问题
- MySql时间戳的问题。
- MySQL服务器时间同步问题
- MySQL服务器时间同步问题
- Date时间相减问题
- Linux学习第八篇--linux文件的操作
- c# object与byte[] 间的转换
- 浏览器内核
- SQL2005\2008行转列脚本编写(表最后列加合计列或平均数列)
- 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清的区别
- MySQL时间相减问题
- Java中常用工具类
- unicode转中文
- 20170614修改框架水印设置
- FTP文件传输
- Android Eclipse项目转Android Studio
- Java多态
- Android 样式 —— layer-list 篇
- H264(NAL简介与I帧判断)