4

私は次の日付を持っています:

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

月と年のみをmysqlデータベースに保存する方法について、いくつか提案が必要です。いくつかの調査の後、私はそれを行う3つの方法を見つけました。

1) 1日を日として使用でき、月と年とともに保存できます。

2)使用する代わりに、データ型をdate使用varcharでき、月と年のみを格納できます。

3) 2 つを整数として 2 つの別々の列として格納できます。つまり、月と年です。

どちらがより良い方法ですか?いくつかの提案が必要です。ありがとう。

4

5 に答える 5

2

1) 1日を日として使用でき、月と年とともに保存できます。

このオプションは、計算や並べ替えを行う必要があるかのように優れており、便利で便利です。

2) 日付を使用する代わりに、varchar データ型を使用でき、月と年のみを格納できます。

3) 2 つを整数として 2 つの別々の列として格納できます。つまり、月と年です。

上記の 2 つのオプションは、日付またはタイムスタンプと比較してスペースが少なくて済むため、問題ありません。しかし、これで計算やオーダーバイを行うことができます。計算するには、「str_to_date」関数で日付を変換する必要があります

これが何らかの形で役立つことを願っています。

于 2012-12-20T10:59:13.393 に答える
2

date次の点に注意して、列を使用できます。

  • 日の部分を1に設定できます
  • カードは、指定された有効期限の 1 か月間有効です。05122012 年 5 月 31 日まで有効であることを意味します。

利点:

  • 並べ替えは簡単です (varchar として保存する場合と比較して)
  • 日付操作は単純です (varchar/2 つの整数列として保存する場合と比較して)
  • データは 1 つの列にとどまります (2 つの整数列として格納する場合と比較して)

サンプルクエリ:

-- 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 に答える