3

これが私の問題です。私のシステムは、日付と時刻を通常の DATETIME 形式で保存します。

'YYYY-MM-DD HH:MM:SS'

これは私が問題を抱えているものです:

この形式の日付フィールドを持つすべての連絡先を選択する必要があります。

'XXXX-12-02 23:59:59' and every other date 7 days leading up to it.

たとえば、応答としてこれらの日付を含むすべての行を取得する必要があります。

1965-12-02
1985-11-28
1990-12-01

これは可能ですか?可能であれば、私に提供できるヘルプやヒントはありますか?

4

2 に答える 2

0

DATETIME次の関数を使用して、変数の特定の部分を取得できます。

  • DAY(your_DATETIME_Variable)->日を整数として取得します
  • MONTH(your_DATETIME_Variable)->月を整数として取得します
  • YEAR(your_DATETIME_Variable)->年を整数として取得します
于 2012-11-27T08:44:13.997 に答える
0

簡単な部分: 同じ日と月の任意の日付を検索するには:

SELECT .... FROM .... WHERE 
   month(timefield)=month('2012-12-02 23:59:59') 
   and day(timefield) = day('2012-12-02 23:59:59)

面倒な方法ですが、(ほとんどの場合) うまくいくのは、

SELECT .... FROM .... WHERE 
   (month(timefield)=month('2012-12-02 23:59:59') 
   and day(timefield) = day('2012-12-02 23:59:59')) or
   (month(timefield)=month(date_sub('2012-12-02 23:59:59' interval 1)) 
   and day(timefield) = day(date_sub('2012-12-02 23:59:59') interval 1)) or
   (month(timefield)=month(date_sub('2012-12-02 23:59:59' interval 2)) 
   and day(timefield) = day(date_sub('2012-12-02 23:59:59') interval 2)) or

等々...

次に、問題が発生します。閏年とは何ですか...それに対する良い解決策はありません...たとえば、シード日が2012年3月5日である場合、2012年2月28日にしか戻りません。しかし、データを2011年2月27日に戻したいと思います...それに対する1つの可能な解決策は、日付を常にうるう年に正規化し、8日前の日付を取得し、不要なものを捨てることですフロントエンド。

于 2012-11-27T08:49:32.963 に答える