3

ユーザーが日と月を含む場合と含まない場合がある日付を指定できるようにしたい (ただし、少なくとも年は含まれる)。問題は、DB に日時として格納される場合です。欠落している日/月はデフォルト値として保存され、元の形式と日付の意味が失われます。

私の考えは、日時列に加えて、実際の形式を文字列として列に格納することでした。次に、他のすべての日付と日時を表示する必要があるときはいつでも、文字列列を使用できます。欠点は、表示したいテーブルのすべての日付列に余分な列が1つ追加されることです。日付時刻の値に依存できないため、ローカライズされた日付を印刷するのは簡単ではありません...おそらく文字列を解析する必要があります.

私は何かを見落としていて、もっと簡単な方法があるかもしれないと思っています。

(解決に問題がある場合は、Rails を使用していることに注意してください。)

4

11 に答える 11

9

Jhenzieによって提案されたように、日付のどの部分が指定されたかを示すビットマスクを作成します。1 =年、2 =月、4 =日、8 =時間(より具体的にすることにした場合)そしてそれを別のフィールドに保存します。

テーブルに余分な列を必要とせずにそれを行うことを考えることができる唯一の方法は、ビットマスクを使用するjhenzieの方法を使用し、そのビットマスクを日時列の秒部分に格納することです。

于 2008-09-18T05:34:55.143 に答える
3

あなたのモデルでは、あなたが気にかけている部分だけに注意を払ってください。したがって、日付全体をデータベースに保存できますが、ユーザーに表示する前に結合します。

于 2008-09-18T05:20:21.903 に答える
2

追加の列は、日時のどの部分が指定されているかを指定するために簡単に使用できます。

1=日2=月4=年

つまり、3は日と月、6は月と年、7は3つすべてです。その時点での単純なint

于 2008-09-18T05:25:41.813 に答える
2

文字列を保存する場合は、説明したケースなどをカバーする ISO 8601 標準を部分的に再発明しないでください。

http://en.wikipedia.org/wiki/ISO_8601

于 2008-09-18T05:51:26.947 に答える
0

おそらく、日時と追加の「精度」列を保存して、出力方法を決定します。出力の場合、高精度列は、対応する書式設定文字列( "YYYY-mm"など)を含む列にマップすることも、書式設定文字列自体を含めることもできます。

于 2008-09-18T05:24:40.037 に答える
0

DB設計についてはよくわかりませんが、ユーザーが月と日を入力したかどうかを示すブール列(各列に1列)を使用するのがクリーンな方法だと思います。次に、指定された日付を保存するには、次のようにします。

  1. ユーザーが入力した日付を日時列に格納します。
  2. ユーザーが月を選択した場合は、ブール月の列を設定します。
  3. ユーザーが日を選択した場合は、ブール日列を設定します。

このようにして、信頼できる日時の部分(つまり、ユーザーが入力したもの)を知ることができます。

int編集:暗号値を持つフィールドを持つよりもはるかに理解しやすいでしょう!

于 2008-09-18T05:28:12.617 に答える
0

informationixデータベースにはこの機能があります。日付フィールドを定義するときは、目的の時刻と日付の属性のマスクも指定します。比較を行う場合、これらのフィールドのみがカウントされます。

于 2008-09-18T05:37:17.150 に答える
0

さまざまなレベルの特異性がある場合、最善の策は、それらを単純なnull許容intとして格納することです。年月日。表示ロジックをプレゼンテーションモデルまたはドメインの値オブジェクトにカプセル化できます。

于 2008-09-18T05:37:33.937 に答える
0

組み込みの時間タイプは、瞬間を表します。組み込みの型を使用して精度(年、月、日、時など)の列を作成するか、独自の日付構造を作成して空の部分にnull(または別の無効な値)を使用することができます。

于 2008-09-18T05:38:53.403 に答える
0

本当に日時として保存する必要がありますか? 文字列 2008 または 2008-8 または 2008-8-1 として保存されていない場合 - 引き出すときに文字列をハイフンで分割すると、元の入力がどの程度具体的であったかを確認できます

于 2008-09-18T05:23:35.140 に答える
0

少なくともルビーの場合-このgemを使用できます-partial-date https://github.com/58bits/partial-date

于 2012-05-26T20:25:33.787 に答える