在mysql数据库中存储月份和年份

4
我有以下日期:

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

我需要一些关于如何在mysql数据库中仅存储月份和年份的建议。经过一些研究,我发现有三种方法可以实现。
1)我可以使用1号作为日期,并与月份和年份一起存储。
2)不使用date数据类型,而是使用varchar数据类型,并仅存储月份和年份。
3)我可以将两个值分别存储为整数,即月份和年份,存储在两个不同的列中。
哪种方式更好?希望得到一些建议。谢谢。

你打算如何处理YY和MM?例如,你需要搜索在2012年到期的卡号吗?不需要吗? - Salman A
@SalmanA:没错,我正在做类似的事情。 - J.K.A.
这是信用卡,对吗? - Salman A
5个回答

2

1) 我可以使用第一种方式将天数存储在月份和年份中。

这个选项更好,因为如果需要进行任何计算或排序,它将非常有用和方便。

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

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

对于前两个选项来说都很好,因为相比日期或时间戳,它们占用更少的空间。但是您无法通过它们进行计算或排序。对于计算,您需要使用“str_to_date”函数将其转换为日期。

希望这些内容能在某种程度上对您有所帮助。


谢谢...但你觉得第二个选项怎么样? - J.K.A.

2
您可以使用日期列,需注意以下几点:
  • 您可以将日部分设置为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 >= CURRENT_DATE”。 - Sir Rufo
@SirRufo:是的,这是可能的(也有意义)。 - Salman A

1

信用卡的到期月/年份表示该卡在本月/年份结束前有效。

存储为可比日期的最佳方法是获取本月的最后一天。

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

1

存储为UNIX格式。将来突然需要添加内容,而且获取任何过时的东西都不成问题。


-1

你可以将其作为整数以YYYYDD的形式存储: 因此,对于2021年5月,您可以存储此整数:202105


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接