【问题标题】:MySQL - How do I store multiple date types (quarter, month, year) in one columnMySQL - 如何在一列中存储多种日期类型(季度、月份、年份)
【发布时间】:2019-06-08 17:32:09
【问题描述】:

我有一些用户上传的数据,需要根据用户选择的时间段进行存储和排序。周期应该只支持月-年或季,没有别的,类似如下:

    +----+---------+-------+
    | id | period  | data  |
    +----+---------+-------+
    |  1 | 2018-09 | test1 |
    |  2 | 2019-01 | test2 |
    |  3 | 2018-Q3 | test3 |
    |  4 | 2017-Q4 | test4 |
    +----+---------+-------+

我最初是在寻找支持日期范围的数据类型,例如 2018-01-01 - 2018-03-31,在这种情况下,只要用户选择 2018 年第一季度,就会使用该数据类型,但是我无法找到这样的数据类型。我可能可以使用两列来支持季度日期,另一列用于月份,最后一个用于年度,但这感觉不是一个好方法。

有什么想法吗?

【问题讨论】:

  • 您是在寻找可以将2018-Q3 转换为2018-01-01 - 2018-03-31 的SQL 计算,还是我不理解这个问题?
  • 两个日期,分隔期间的开始和结束,可能是您最好的选择;任何替代方案都可能最终涉及在查询中间解析数据(不是让自己陷入的好情况)。如果您确实需要轻松/快速了解所表示的周期类型,也可以使用指示周期类型的第三个字段。 另一种选择是将季度和月度数据分开表格。

标签: mysql database date


【解决方案1】:

mysql 提供了大量的函数来管理日期……因此您可以简单地归档参考日期并使用 mysql 函数。

例如使用实际日期作为日期

 select quarter(curdate ()), month(curdate ()), year(curdate())

通过这种方式,您可以避免存储计算范围..

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

【讨论】:

  • “pquindi potrest semplciemnte”是什么意思?
  • @RaymondNijland .thanks .. 错误 .. 复制和过去 .. 答案已更新 ..
  • 我对这种方法的唯一担心是您无法索引函数结果;例如,如果您需要查找特定日期所在的所有数据点,或加入具有特定日期的“详细”表,则需要为所有行计算季度|月和年值......和过滤条件的值,或连接表的值。
猜你喜欢
  • 2021-04-30
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 2012-02-26
  • 1970-01-01
  • 2023-04-11
  • 2018-09-04
相关资源
最近更新 更多