【发布时间】:2015-11-09 13:43:31
【问题描述】:
我想创建一个存储时间(小时和分钟)的mysql表,例如456:45(456小时和45分钟)
创建表 mytable(id VARCHAR(40) NOT NULL, my_time DATE NOT NULL);
应该使用哪种数据类型?
【问题讨论】:
-
也许很有趣:11.1.2 Date and Time Type Overview。即
time
我想创建一个存储时间(小时和分钟)的mysql表,例如456:45(456小时和45分钟)
创建表 mytable(id VARCHAR(40) NOT NULL, my_time DATE NOT NULL);
应该使用哪种数据类型?
【问题讨论】:
time
TIME - 以 HH:MM:SS 显示值
范围是“-838:59:59”到“838:59:59”。
您可以使用字符串或数字为时间列赋值。
【讨论】:
如果TIME datatype range 对你来说足够了,那就去吧。它以比您可能需要的更高的精度存储信息,并且有一些怪癖:
out-of-range TIME values are clipped to the appropriate endpoint of the TIME range.
否则,如果您只需要几分钟,您可以使用 DECIMAL 数据类型。您有两种可用的方法:
优点:你有两位数的全精度,并且可以通过截断立即读取分钟。
缺点:0.30 + 0.30 应该是 1.00,而不是 0.60。此外,“27:00 前一分钟”将是 26.99,而不是 26.59。
优点:计算变得非常简单。
缺点:不能立即查看 17.25 并将其解释为 17 小时 15 分钟。您需要得到小数部分并乘以 0.60。此外,要获得可接受的精度,您需要多于两位小数(3 或 4,具体取决于转换技术)。
另一种可能性是做 MySQL 所做的事情(尽管在微秒级别)并使用 INTEGER 字段来存储分钟。那么 1200 小时 30 分钟将由整数 72030 表示。除以 60 得到小时,模 60 得到分钟。
【讨论】:
1) 创建VARCHAR 列,并在保存数据时使用分隔符,例如:-
456:45,456_45,456-45
2) 其他更好的选择是convert time in second 或创建Int 列并在seconds 中节省时间
【讨论】:
应该使用的数据类型是:
DATETIME
或者看看这个:
http://www.w3schools.com/sql/sql_dates.asp
希望这会有所帮助,
苏海尔。
【讨论】: