3

「Date」という名前のフィールドを持つ MySQL データベースにテーブルがあります。問題は、日付が DD-MM-YYYY の形式であるため、DATE タイプのフィールドとして MySQL にアップロードできないことです。代わりに、フィールド タイプは文字列です。これを念頭に置いて、この効果を与えるクエリをどのように書くことができますか -

SELECT * FROM `table` 
WHERE  (date_field BETWEEN '2010-01-30' AND '2010-09-29')

「date_field」はDATE型ではなく文字列であることに注意してください。

4

3 に答える 3

16
SELECT * FROM `table` 
WHERE str_to_date(date_field, '%d-%m-%Y') BETWEEN '2010-01-30' AND '2010-09-29'

SQLFiddle の例

編集

これを行うこともできます:

SELECT * FROM `table` 
WHERE cast(substring(date_field, 7, 4) as unsigned) * 10000 + cast(substring(date_field, 4, 2) as unsigned) * 100 + cast(substring(date_field', 1, 2) as unsigned)
BETWEEN 20100130 AND 20100929
于 2012-06-07T07:16:36.910 に答える
8

テーブルを直せ!

  1. DATE適切なデータ型の新しい列を追加します。

    ALTER TABLE `table` ADD new_date_field DATE AFTER date_field;
    
  2. MySQL のSTR_TO_DATE()関数を使用して、古い列に保持されている日付を新しい列に入力します。

    UPDATE `table` SET new_date_field = STR_TO_DATE(date_field, '%d-%m-%Y');
    
  3. 古い列を削除します (必要に応じて、新しい列の名前をその場所に変更します)。

    ALTER TABLE `table` DROP date_field, CHANGE new_date_field date_field DATE;
    
  4. この新しい列を使用するようにアプリケーションを変更してください。

于 2012-06-07T07:26:30.407 に答える
0

さまざまな形式でDatesを操作してきましたが、データベース形式に戻すか、独自の一貫した形式で処理するのが最善であることがわかりました。私たちが使用するオプションの1つは、独自の日時形式です。これは、うるう年などで常に正しく並べ替えられ、データの解析を容易にするYYYYMMDDhhmmssです。その後、問題なくユーザーの希望するビューにフォーマットを表示できます。

これはあなたの質問に対する直接の答えではありませんが、さまざまな国の日付と時刻の形式を処理するときに、多くの時間と手間を節約できることがわかりました。また、ズールー時間で時間を節約する傾向があります。

于 2012-06-07T13:59:28.390 に答える