6

だから私はテーブルを持っています。そのテーブルのすべてのエントリには、それに関連付けられた日付があります。

  • 部分的な日付のサポート: 1994 年 5 月 2 日、16:45 GMT+4、および2003 年 4 月はどちらも有効です。
  • 比較可能: 特定の日付の前後のすべてのエントリを照会したい (この日付は常に完全です。つまり、秒とタイムゾーンまで正確です)。2003 年 4 月は 1994 年 5 月 2 日 16:45 GMT+4より後に来る必要があり、日付は正確に並べる必要があります (つまり、2003 年 4 月* は2003 年 4 月 3 日より前になります)。

この問題にどのように取り組みますか?int私は現在、Postgres を使用しています (ただし、それに関連付けられているわけではありません) 。実際の並べ替え/比較ロジックをアプリケーションに移行して、すべての日付属性の列を単純に持つアプローチに傾倒しています。

面白いアイデアはありますか?

4

2 に答える 2

9

ISO 8601日付文字列を使用できます。ISO日付形式は、記述した形式の部分的な日付をサポートしています(ただし、年なしの「4月23日」などに注意してください)。

あなたの例は次のとおりです。

  • 「1994 年 5 月 2 日、16:45 GMT+4」:1994-05-02T12:45:00Z
  • "2003 年 4 月":2003-04

これらを単純な文字列として並べ替えて比較し、必要な結果を得ることができます。つまり2003-04-03、語彙的には の後にあり2003-04ます。

最後から任意のレベルの精度を削除できますが、それでも機能します。コンポーネントを最初または途中から削除することはできません。

上記の例のように、これが正しく機能するには、すべてのタイムゾーンを UTC に正規化する必要があることに注意してください。

データベースで日付/タイムスタンプ型を使用する場合の別の方法は、日付の精度をセカンダリ列に格納することです。たとえば、「2003 年 4 月」をタイムスタンプとして日付フィールドに格納し、セカンダリ フィールドでフラグを使用して、この日付が「月」の精度で格納され、「2003 年 4 月 1 日午前 12 時」と解釈されるべきではないことを示します。

于 2013-06-16T12:59:50.730 に答える