我现在正在开发一个mysql数据库。我需要在表格中有2列:第一列必须以"N年M月“的格式存储信息。另一个:"H小时MM分钟“。你能给我一个如何在表格中表示的想法吗?我知道,mysql不提供任何时间间隔数据类型。我将非常感谢您的意见。
发布于 2014-11-26 05:34:52
如果您的数据库选择不是固定的,那么值得注意的是,PostgreSQL有一个原生的时间/日期间隔类型,它可以很容易地表示您想要的间隔。
但让我们假设您必须使用MySQL。然后你将需要一种自己开发的方法来表示你的间隔,因为MySQL doesn't have any native ones。
H * 3600 + MM * 60。转换回H和MM将通过除法、模数或operations."N,M"和H小时MM分钟= "H:MM"。无论哪种方式,您的逻辑(SQL和/或应用程序语言)都必须解释这些组合类型。字符串连接不是特别有效,但在大多数编程语言中很容易分解。例如在Python中:
年,月= yearmonth.split(',')中零件的int(零件)
这在SQL中不太方便,但是组合使用cast).、left、right和locate就可以做到这一点(可能只添加了少见的SQL
一个更大的问题是,虽然你的小时和分钟间隔定义得很好,但你的年和月间隔却很少如此。年和月都没有固定的天数(小时、秒等)。有闰年,月份有不同的长度。你可以假设一个固定值作为估计值(例如,365.25 days/year考虑了闰年,或者更精确的365.2425 days/year考虑了100年和400年的特殊处理)。这通常是在进行评估时完成的,例如4.33 weeks/month。请记住,这些只是估计。如果将时间间隔保留为组合字符串,则可以使用外部库,例如Perl的Date::Manip,它在处理日期时间间隔方面有相当大的优势。这给我们带来了最后一个选择:
1:2:3:4:5:6:7。如果你打算依赖一个外部库,不妨选择它的原生格式。其他语言和库都有自己喜欢的格式。只需小心选择一个能够理解时间流逝的语义,并很好地映射到您的应用程序需求的应用程序。并不是所有人都会。例如,Python确实有一个原生的datetime.timedelta类型,但在它的理解中,天是最大的单位。这可能不能很好地满足你几年甚至几个月才能完全表达的需求。作为Wrikken suggests,如果您有一个支持a standard representation like ISO8601 durations的库,那就更好了。然而,我还没有发现这样的库像Date::Manip.这样的替代库那样通用、支持良好或功能丰富
https://stackoverflow.com/questions/27136544
复制相似问题