0

テーブル内の日付は、次の形式の文字列です。

"10/12/2009"

では、1か月のすべてのレコードをどのように取得するのでしょうか。たとえば、6月(番号「6」が提供されている)としましょう。

4

4 に答える 4

3

MySQL関数STR_TO_DATEを確認してください。

ただし、日付を文字列として保存しないでください。タイプDATEを使用します。

于 2012-06-28T20:04:02.080 に答える
0

質問に対する簡単な答えは、STR_TO_DATEandMONTH関数を使用して、1)文字列表現をDATEに変換し、2)日付から月コンポーネントを抽出できることです。

SELECT t.*
  FROM mytable t
 WHERE MONTH(STR_TO_DATE(t.dateasstringcol,'%M/%d/%Y')) = 6

(これは、「2009年10月12日」までに、12月10日ではなく10月12日を指定していることを前提としています。そうでない場合は、フォーマット文字列を調整する必要があります。)

または、月が実際に日付の先頭部分である場合、月が先頭コンポーネントである場合は、単純な文字列比較を行うことができます。

SELECT t.*
  FROM mytable t
 WHERE t.dateasstringcol LIKE '6/%' 
    OR t.dateasstringcol LIKE '06/%'

(日付を表す行の値に正確な形式が指定されている場合は、これらの述語の1つを削除できます。月が常に2桁で格納される場合、または月が先行ゼロで格納されることはありません。)

その月の引数(たとえば「6」)を渡す場合は、次のようにステートメントを作成できます。

 WHERE t.dateasstringcol LIKE '6' + '/%'

月が日付の2番目のコンポーネントである場合は、次を使用できます。

SELECT t.*
  FROM mytable t
 WHERE t.dateasstringcol LIKE '%/' + '6' + '/%' 
    OR t.dateasstringcol LIKE '%/' + '06' + /%'

ノート:

前の例のクエリはすべて、任意の年(2009、2010、2011)の6月の行を返します。

これらの例を拡張して、MONTH関数の代わりにYEAR関数を使用するか、文字列の比較のために、年と同様のことを行うことができます。

    AND t.dateasstringcol LIKE '%/%/2011'

通常、次のような日付範囲を使用して、特定の年の特定の月の行を抽出します。

SELECT t.*
  FROM mytable t
 WHERE MONTH(STR_TO_DATE(t.dateasstring,'%M/%d/%Y')) >= '2011-06-01'
   AND MONTH(STR_TO_DATE(t.dateasstring,'%M/%d/%Y')) <  '2011-07-01'

もちろん、日付値がDATEVARCHARではなくデータ型として格納されている場合、これはSTR_TO_DATE関数とMONTH関数が不要であることを意味し、ネイティブのDATE列との比較を指定できます。このアプローチにより、日付列のインデックスを利用できるようになり、大きなテーブルでのクエリのパフォーマンスを向上させることができます。

SELECT t.*
  FROM mytable t
 WHERE t.realdatecol >= '2011-06-01'
   AND t.realdatecol <  '2011-07-01'
于 2012-06-28T20:30:19.507 に答える
0

STR_TO_DATE関数はここであなたの友達です:

SELECT * FROM my_table
WHERE STR_TO_DATE('10/12/2009','%M/%d/%Y') >= '2012-06-01';
于 2012-06-28T20:04:37.727 に答える
0

今月または特定の月のデータが必要な場合は、MONTHがここで役立ちます。例えば:

$month = date('m'); OR particular month.
SELECT * FROM users WHERE MONTH(str_to_date("10/12/2009",'%e/%m/%Y')) = $month;
于 2017-09-20T09:38:14.403 に答える