-3

テーブルフィールド構造:

id fdate tdate name
1 2012-07-07 2012-07-30
2 2012-08-07 2012-09-30
3 2012-07-17 2012-08-30

ここ

fdate--->テーブル内のフィールドの1つtdate--->テーブル内の別のフィールド

2012-07-07とのような2つの値を渡します2012-09-30

そして、私は上記の範囲からの出力が必要です:

次のように状態を確認する必要があります fdate between2012-07-072012-09-302012-07-072012-09-30andそのようにand tdate betweenand

期待される出力:

month  Days
07     43
08     53
09     30

編集:著者のコメントに基づいて、質問は次のとおりです-日付範囲を渡し、テーブルのデータと比較するときに、すべての日をカウントし、月ごとにグループ化された合計を表示するにはどうすればよいですか?

4

4 に答える 4

3

私はこれがあなたが望む正確な結果をあなたに与えないことを知っています、しかし私はそれが少なくとも正しい方向にあなたを助けると思います:

mysql> create table dateTest (id int(2), fdate date, tdate date);
Query OK, 0 rows affected (0.04 sec)

mysql> insert into dateTest values(1, '2012-07-07', '2012-07-30');
Query OK, 1 row affected (0.00 sec)

mysql> insert into dateTest values(1, '2012-08-07', '2012-09-30');
Query OK, 1 row affected (0.00 sec)

mysql> insert into dateTest values(1, '2012-07-17', '2012-08-30');
Query OK, 1 row affected (0.00 sec)

mysql> select month(tdate) as month, datediff(tdate, fdate) as tally from dateTest group by month(fdate), month(tdate);
+-------+-------+
| month | tally |
+-------+-------+
|     7 |    23 |
|     8 |    44 |
|     9 |    54 |
+-------+-------+
3 rows in set (0.00 sec)

ご覧のとおり、fdateでグループ化しているため、真ん中の月をスキップしていますが、これはあなたにとって正しい方向への第一歩です。

于 2012-09-04T13:18:14.817 に答える
0

MySQLのTIMESTAMPDIFF()関数を見てください。

これにより、2つのTIMESTAMPまたはDATETIME値(またはMySQLが自動変換する場合はDATE)と、差の基にする時間の単位を渡すことができます。

最初のパラメーターの単位としてMONTHを指定できます。

mysql>SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- Outputs: 1


mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
        -> -1
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
        -> 128885
于 2012-09-04T13:00:09.397 に答える
0

しかし、あなたの質問は明確ではありません。しかし、私はあなたのためにこれを持っています。

phpを使用してMySQLテーブルからデータをフェッチする必要があります。次に、そこで日付の差を計算できます。

このスタックオーバーフローの質問を参照してください。PHPを使用して2つの日付の差を計算するにはどうすればよいですか。およびhttp://php.net/manual/en/function.date-diff.phpに関する公式のphpdate_diffドキュメント

于 2012-09-04T13:03:17.363 に答える
-3

私のSQLではbetween句を使用できます。

   select * from tbl where datetime between '2012-07-07' and '2012-09-30';

例として

于 2012-09-04T12:53:51.690 に答える