1

I have two query conditions here, and I would think that these queries would result in the same data, but they don't.

// 1st Condition:
WHERE month(jurnal.time) >= '01'
  AND month(jurnal.time) <= '06'
  AND year(jurnal.time)   = '2012'

// 2nd Condition:
WHERE jurnal.time  > '2012-01-01'
  AND jurnal.time <= '2012-06-30'

I want the first condition to result in the same data as the second conditions.

Thanks in advance.

4

3 に答える 3

2
  1. 最初のバージョンには が含まれjurnal.time = '2012-01-01'ていますが、2 番目の条件には含まれていません (>ではなくを使用しているため>=)。

  2. あなたの質問から、jurnal.time列のデータ型が何であるかは明確ではありません:

    • DATETIMEまたはの場合TIMESTAMP、2 番目の例には00:00:006 月 30 日以降の時間が含まれていないため、代わりに日付部分のみを取得する必要があります。

      WHERE DATE(jurnal.time) BETWEEN '2012-01-01' AND '2012-06-30'
      

      または、比較に 1 日のすべての時間が含まれていることを確認します。

      WHERE jurnal.time BETWEEN '2012-01-01 00:00:00' AND '2012-06-30 23:59:59'
      
    • の場合DATE、この点は例に影響しませんが、2 番目の例を次のように単純化できます。

      WHERE jurnal.time BETWEEN '2012-01-01' AND '2012-06-30'
      
于 2012-07-07T18:24:46.523 に答える
1

CAST を使用した BETWEEN 比較演算子をお勧めします。

WHERE jurnal.time BETWEEN CAST('2012-01-01' AS DATE) AND CAST ('2012-06-30' AS DATE)

文字列は必ず、jurnal.time の列と同じ型にキャストしてください。

于 2012-07-07T18:01:06.653 に答える
0

最初のクエリの条件は、日付解析関数から返された値を数値であるかのように比較しようとしていますが、それらは単なる文字列だと思います。'01' と '06' は、数字の 1 と 6 ではなく、単純な文字列として SQL によって解釈されます。

2 つ目は、SQL が完全な日付文字列表現を日付に変換して比較に使用できるほどスマートであることです。

于 2012-07-07T18:02:30.390 に答える