22

グーグルで日付を比較する方法をいくつか試しましたが、残念ながら期待どおりの結果が得られませんでした。次のような記録の現在の状態があります。

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data;

              +-----------------------------------------+
              | date_format(date(starttime),'%d-%m-%Y') |
              +-----------------------------------------+
              | 28-10-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 03-11-2012                              |
              | 03-11-2012                              |
              | 07-11-2012                              |
              | 07-11-2012                              |

日付を比較したいので、次のようにします:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012';
               +-----------------------------------------+
               | date_format(date(starttime),'%d-%m-%Y') |
               +-----------------------------------------+
               | 28-10-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 03-11-2012                              |
               | 03-11-2012                              |
               | 07-11-2012                              |
               | 07-11-2012                              |

結果に「28-10-2012」を含めるべきではないと思います。なにか提案を?前もって感謝します。

4

3 に答える 3

43

あなたのフォーマットは基本的にソート可能なものではありません - あなたは文字列を比較しており、文字列 "28-10-2012""02-11-2012"よりも大きいです。

代わりに、日付を日付として比較し、出力用のターゲット形式にのみ変換する必要があります。

これを試して:

select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';

(ドキュメントに従って、入力は常に年月値の形式である必要があります。)

がフィールドの場合starttimeは、変換の繰り返しを避けるためにクエリを変更することを検討してください。DATETIME(オプティマイザはそれを回避するのに十分賢いかもしれませんが、チェックする価値があります。)

select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';

(最初から日付をフォーマットするのは珍しいことに注意してください-ISO-8601標準などである一般的d-m-Yに使用する方がよいでしょうy-M-d。ただし、上記のコードは質問で求めたことを実行します。)

于 2012-11-22T07:25:25.990 に答える
2

2012年2月11日ではなく2012年11月2日を使用すると、date_format()は不要になります。

于 2012-11-22T07:36:03.683 に答える
0

次の方法を使用します。

public function dateDiff ($date1, $date2) {
/* Return the number of days between the two dates: */
  return round(abs(strtotime($date1)-strtotime($date2))/86400);
}  
/* end function dateDiff */

それが役立ちます!

于 2016-10-03T11:58:36.550 に答える