0

MySQLで生年月日を見つけるというこの問題について、誰かが私にガイダンスを与えることができるかどうか、ただ興味があります.

現在、セットアップされている「カレンダー」があり、その月の 1 か月 + 3 日前と 3 日前が表示されます。

2013 年になるため、「年」が過去 3 日間で同じではないため、現在発生している問題に遭遇しました。したがって、MySQL から選択する私のコードは次のとおりです。

SELECT * FROM contacts WHERE userId = '23' AND Month(dob) IN('12', '01', '01')

そして今、私は思うに、もう少し良い日付の比較を取得する必要があります. 私のコードは、2 つの日付 (2012-12-01) - (2013-01-30) があることです。

このような質問が寄せられていることは知っていますが、「まともな」ものを見つけることができませんでした...可能であれば、私を助けていただければ幸いです。

要するに、日付を「クエリ」するためのより良い方法が必要だと思います....事前に感謝します!

4

2 に答える 2

1

次のような範囲で日付をクエリできます。

 SELECT * 
   FROM contacts
  WHERE dob >= :first_date - INTERVAL 3 DAY
    AND dob < :first_date + INTERVAL 1 MONTH + INTERVAL 3 DAY + INTERVAL 1 DAY

モンキービジネスが少しあります

   dob < (something)

余分な日を追加し、の<代わりに使用する行<=。これは、DATETIME値の時刻に真夜中が含まれている必要がないためです。そのため、翌日の午前 0 時までにすべてを含めたいと考えています。

それ以外の場合、このクエリは、指定された範囲内の日付を持つすべての行を検索します。

Algomorph が述べたように、現在の日付で作業している場合、このように現在の日付を現在の月の最初の日に切り詰めることができます。

  CAST(DATE_FORMAT(CURRENT_DATE,'%Y-%c-01') AS DATE)

これにより、このようなクエリが取得されます。

 SELECT * 
   FROM contacts
  WHERE dob >= CAST(DATE_FORMAT(CURRENT_DATE,'%Y-%c-01') AS DATETIME) 
                          - INTERVAL 3 DAY
    AND dob < CAST(DATE_FORMAT(CURRENT_DATE,'%Y-%c-01') AS DATETIME)
                           + INTERVAL 1 MONTH + INTERVAL 3 DAY + INTERVAL 1 DAY
于 2012-12-15T02:09:35.183 に答える
1

次のようなものを試してください:

SELECT * 
FROM contacts 
WHERE userId = '23' 
   AND dob BETWEEN 
     (CURRENT_DATE - INTERVAL (DAYOFMONTH(CURRENT_DATE)+3) DAY) 
     AND ((CURRENT_DATE + INTERVAL 1 MONTH) + INTERVAL 3 DAY);

免責事項: これは私の頭によるものなので、構文をテストしてください。注: これは、[dob] フィールドが DATETIME ではなく DATE のみであることを前提としています。DATETIME/TIMESTAMP を使用する場合は、DATE にキャストするか、それに応じて上限と下限を調整します。

于 2012-12-15T02:14:15.780 に答える