4

我有以下日期:

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

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

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

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

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

哪个是更好的方法?需要一些建议。谢谢。

4

5 回答 5

2

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

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

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

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

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

我希望这会以某种方式帮助你。

于 2012-12-20T10:59:13.393 回答
2

您可以使用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-12-20T11:04:25.973 回答
1

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

于 2012-12-20T10:55:35.890 回答
1

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

存储为可比较日期的最佳方法应该是本月的最后一天

STR_TO_DATE( CONCAT( '01,', @Month, ',', @Year, '%d,%m,%Y ) 
  + INTERVAL 1 MONTH 
  - INTERVAL 1 DAY
于 2012-12-20T11:05:19.833 回答
-1

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

于 2021-08-10T09:23:01.590 回答