gpt4 book ai didi

mysql - mysql中如何描述区间数据类型?

转载 作者:行者123 更新时间:2023-11-29 23:23:21 25 4
gpt4 key购买 nike

我现在正在开发 mysql 数据库。我需要在表中有两列:第一个必须以“N 年 M 月”格式存储信息。另一种是:“H 小时 MM 分钟”。你能给我一个关于如何在表格中表示它的想法吗?我知道,mysql不提供任何时间间隔数据类型。我非常感谢您的意见。

最佳答案

如果您的数据库选择不固定,则值得注意的是 PostgreSQL 有一个 native 时间/日期间隔类型,可以轻松表示您所需的间隔。

但我们假设您必须使用 MySQL。那么你将需要一种本土的方式来表示你的间隔,因为 MySQL doesn't have any native ones .

  1. 一种简单的方法是用最小公分母(例如“秒”)来表示间隔。 H 小时和 MM 分钟 = H * 3600 + MM * 60 。转换回 H 和 MM 可以通过除法、取模或 divmod 来完成。操作。

  2. 另一种方法是使用连接字符串,例如 N 年 M 月 = "N,M"和 H 小时 MM 分钟 = "H:MM"

    无论哪种方式,您的逻辑(SQL 和/或应用程序语言)都必须解释这些组合类型。字符串连接并不是特别高效,但在大多数编程语言中很容易分解。例如。在Python中:

    years, months =  [int(part) for part in yearmonth.split(',')]

    在 SQL 中有点不太方便,但是 left 的组合, right ,和locate就可以了(可能需要罕见地添加 cast )。

一个更大的问题是,虽然您的小时和分钟间隔定义明确,但您的年和月间隔则不太明确。年和月都没有固定的天数(小时、秒等)。有闰年,月份也有不同的长度。您可以假设一个固定值作为估计值(例如 365.25 days/year 考虑到闰年,或者更准确的 365.2425 days/year 考虑到 100 年和 400 年标记的特殊处理)。估算时经常这样做,例如 4.33 weeks/month 。请记住,这些只是估计值。如果将间隔保留为组合字符串,则可以使用外部库,例如 Perl 的 Date::Manip它在处理日期间隔方面具有相当的悟性。这给我们带来了最后一个选择:

  • 选择外部区间解释库,并 promise 使用其区间编码。例如,Date::Manip::Delta将 7 个字段(年、月、周、日、小时、分钟和秒)压缩为冒号分隔的字符串,例如 1:2:3:4:5:6:7 。如果您要依赖外部库,不妨选择其 native 格式。其他语言和库都有自己喜欢的格式。请小心选择一个能够对时间的流逝进行语义理解并能很好地满足您的应用程序需求的工具。并非所有人都会。例如,Python 确实有一个 native datetime.timedelta类型,但天是其理解中最大的单位。这可能无法很好地满足您需要数年甚至数月才能充分表达的需求。如Wrikken suggests ,如果您有支持 a standard representation like ISO8601 durations 的库,那就更好了。然而,我还没有发现这样的库像Date::Manip这样的替代库一样常见、支持良好或功能丰富。 .
  • 关于mysql - mysql中如何描述区间数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27136544/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com