0

次のMySQLクエリがあります:

SELECT 
  s.student_socialnr, s.student_lastname, s.student_firstname,
  cs.city_name,
  scp.cpl_startdate, scp.cpl_enddate, scp.cpl_invoice,
  cu.customer_name, scp.cpl_coursename
FROM students s
 INNER JOIN studentcourseplan scp ON scp.student_id = s.student_id
 INNER JOIN cityselections cs ON cs.city_id = s.student_city_id
 INNER JOIN customers cu ON cu.customer_id = s.student_customer_id

これにより、次のようなものが出力されます。

+------------------+------------------+------------------+-----------+---------------+--------------+-------------+---------------+----------------+
| student_socialnr | student_lastname | student_firstname| city_name | cpl_startdate | cpl_enddate  | cpl_invoice | customer_name | cpl_coursename |
+------------------+------------------+------------------+-----------+---------------+--------------+-------------+---------------+----------------+
| 000000-0000      | Doe              | John             | Dallas    | 2012-06-01    | 2012-06-30   | 1337        | The customer  | The course     |
+------------------+------------------+------------------+-----------+---------------+--------------+-------------+---------------+----------------+
| 000000-0000      | Johnsson         | Derp             | Texas     | 2012-02-01    | 2012-07-28   | 5000        | The customer  | The course     |
+------------------+------------------+------------------+-----------+---------------+--------------+-------------+---------------+----------------+
| 000000-0000      | Derpina          | Lisa             | New York  | 2013-01-01    | 2013-04-01   | 2001        | The customer  | The course     |
+------------------+------------------+------------------+-----------+---------------+--------------+-------------+---------------+----------------+

2 つの質問があります。cpl_startdateフィールドとにフィルターを設定できるようにしたいと思いますcpl_enddate。たとえば、ユーザーがフィルターcpl_startdate = '2012-01-01'を設定するとcpl_enddate = '2012-12-31'、その範囲内の日付を持つすべての行が出力されます。したがって、上記の例を使用すると、選択した日付範囲にあるため、最初の 2 行のみを出力する必要があります。

私は試した

.. WHERE scp.cpl_startdate <= '2012-01-01' AND scp.cpl_enddate >= '2012-12-31'

.. 運が悪い。BETWEENどうにか して MySQL 構文を使用できますか?

また、2 つの日付範囲の間の日数を数えることは可能ですか? スパン間の日数の INT を出力したいと思います。必ずしも同じクエリではありません..

4

1 に答える 1

2

比較符号を切り替えます。

.. WHERE scp.cpl_startdate >= '2012-01-01' AND scp.cpl_enddate <= '2012-12-31'

特定の行の開始日から終了日までの日数をカウントするには、これを select ステートメントに追加します。

DATEDIFF(scp.cpl_enddate, scp.cpl_startdate) AS DaysDifference

DATEDIFF(expr1, expr2) は、expr1 - expr2 の日付差を返します。詳細については、MySQL のドキュメントを参照してください。

于 2012-06-16T10:57:45.947 に答える