【问题标题】:Store month and year in mysql database在mysql数据库中存储月份和年份
【发布时间】:2012-12-07 21:02:37
【问题描述】:

我有以下日期:

$params['ExpirationMonth'];
$params['ExpirationYear'];

我需要一些关于如何在 mysql 数据库中仅存储月份和年份的建议。经过一番研究,我找到了 3 种方法。

1) 我可以使用 1st 作为日期,并且可以与月份和年份一起存储。

2) 我可以使用varchar 数据类型而不是使用date,并且只能在其中存储月份和年份。

3) 我可以将两者作为整数存储为两个单独的列。即月份和年份。

哪种方法更好?需要一些建议。谢谢。

【问题讨论】:

  • 你打算怎么处理YY和MM?例如。 2012年到期的卡号需要查询吗?没有?
  • @SalmanA :对,我正在做类似的事情
  • 是信用卡吧?

标签: php mysql sql date


【解决方案1】:

您可以使用date 列,请记住:

  • 您可以将天部分设置为 1
  • 该卡在指定到期日的整个月内有效。 0512 表示有效期至 2012 年 5 月 31 日。

优点:

  • 排序很简单(与存储为 varchar 相比)
  • 日期操作很简单(与存储为 varchar/两个整数列相比)
  • 数据保留在一列中(与存储为两个整数列相比)

示例查询:

-- expires in 2012
WHERE expires >= '2012-01-01' AND expires < '2012-01-01' + INTERVAL 1 YEAR
-- expires in Dec 2012
WHERE expires >= '2012-12-01' AND expires < '2012-12-01' + INTERVAL 1 MONTH

【讨论】:

  • 但是你为什么不存储最后一个有效日期2012-05-31?选择会更容易WHERE expire_date &gt;= CURRENT_DATE
  • @SirRufo:是的,这是可能的(而且是有道理的)。
【解决方案2】:

1) 我可以使用 1st 作为日期,并且可以与月份和年份一起存储。

这个选项更好,好像有任何计算或排序的需要 完成后,它将是有用的和得心应手的。

2) 我可以使用 varchar 数据类型而不是使用日期,并且只能在其中存储月份和年份。

3) 我可以将两者作为整数存储为两个单独的列。即月份和年份。

以上两个选项都很好,因为它会占用更少的空间 日期或时间戳。但是你可以用它来计算或排序。为了 计算您需要通过“str_to_date”函数将其转换为日期

我希望这会对你有所帮助。

【讨论】:

  • 谢谢...但是您对第二个选项有何看法?
【解决方案3】:

存储为 UNIX。以后突然需要加点东西,过时也没问题

【讨论】:

    【解决方案4】:

    信用卡到期月/年表示此卡有效期至本月/年末。

    将本月最后一天作为可比较日期存储的最佳方式

    STR_TO_DATE( CONCAT( '01,', @Month, ',', @Year, '%d,%m,%Y ) 
      + INTERVAL 1 MONTH 
      - INTERVAL 1 DAY
    

    【讨论】:

      【解决方案5】:

      您始终可以像 YYYYDD 一样将其存储为整数: 所以对于 2021 年 5 月,您可以存储这个整数:202105

      【讨论】:

        猜你喜欢
        • 2014-08-07
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-30
        • 2011-06-27
        • 1970-01-01
        • 2012-02-24
        相关资源
        最近更新 更多