2016-08-17 2 views
2

PHPとMySQLをまだ学習していたときに作成した非常に古いデータベースがあります。 私が移入した場合:MySQLが別の月に日付を選択していない理由

SELECT * FROM Jobs WHERE (date BETWEEN 'Jul.01 2016' AND 'Aug.31 2016') 

SELECT * FROM Jobs WHERE (date BETWEEN 'Aug.01 2016' AND 'Aug.31 2016') 

を私は実際に行

Found rows: 4 Warnings: 0 Duration for 1 query: 0.000 sec.

しかし、私は私の月は(8月1日から7月1日までの範囲を移動する)に変更一度に取り込むことができます

7月1日から8月31日までの範囲には8月1日から8月31日までの範囲(前の例)が含まれていますので、少なくとも4行を入力してください

Found rows: 0 Warnings: 0 Duration for 1 query: 0.016 sec.

私も、彼らは別の月持つ行を読み込むことができます方法はありますか?

+3

どのデータ型が 'date'ですか?それは 'DATETIME'ですか、それとも単なる文字列ですか? – Machavity

+0

@Machavityそれは 'VARCHAR'なので、formatは実際には' Jul.01 2016'のような文字列です –

+0

次に 'DATETIME'への切り替えを考える必要があります。そのような日にインデックスルックアップを行うと、高価になります – Machavity

答えて

3

あなたが最初の有効な日付にあなたの日付文字列を変換する必要があります。

SET @date := 'Aug.01 2016'; 

SELECT STR_TO_DATE(@date,'%M.%d %Y'); 

は出力(YYYY-MM-DD):2016-08-01

今すぐ結果を検索するためのクエリでこれを使用します2016-07-01 & 2016-08-31の間の日付を有する。

SELECT 
* 
FROM Jobs 
WHERE STR_TO_DATE(date,'%M.%d %Y') BETWEEN '2016-07-01' AND '2016-08-31'; 

注:しかし、日付がdateデータ型の列に格納する必要があります。 datatypedate列のdateに変換するのが大変です。ナットシェルで

ALTER TABLE Jobs 
ADD new_date_column date; 

UPDATE Jobs 
SET new_date_column = STR_TO_DATE(date,'%M.%d %Y'); 

ALTER TABLE Jobs DROP COLUMN `date`; 

ALTER TABLE Jobs CHANGE COLUMN `new_date_column` `date` date; 

手順:

  1. タイプdateJobsテーブルに新しい列を追加し、以下の手順を実行することを行うために

  2. date列 から有効な日付に変換した後、この新しい列を更新してください。

  3. dateの列は必要ありません。だから落とす。

  4. 新しく作成された列の名前をdateに変更します。

関連する問題