0

2 つの異なる日付の間のデータベース テーブルからすべての値を取得しようとしています。問題は、日付列に「MM/DD/YYYY HH:MM」という形式の文字列として日付が含まれていることです(つまり、2012 年 9 月 13 日 13:15、2012 年 10 月 14 日 22:32、2012 年 11 月 8 日 12)。 :10など)。SELECT および LIKE クエリを使用して、渡された日付文字列を含むすべての行を単独で取得できますが、特定の範囲 (2012 年 9 月 13 日から 9/ の間など) の間のすべての行を選択する必要があります。 15/2012)。これを機能させるには、日付形式に変換する必要がありますか?

これは、1 つの日付を入力して動作するコードです。

$result=mysql_query("SELECT * FROM data WHERE data_time RLIKE '^$date_range1'");

2つの日付から選択する必要があります。私はこれを試しましたが、うまくいきません:

$result=mysql_query("SELECT * FROM data WHERE data_time RLIKE BETWEEN '^$date_range1%' and '^$date_range2%");
4

2 に答える 2

2

dateはい、日付をordatetime型に変換する必要があります。

そうしないと、順序付けが機能しません。テキストとして、「11」は「12」より小さいため、「11/02/2012」が「12/03/1901」の前になります。

于 2012-09-26T21:26:07.487 に答える
-1

1. フィールド date_time を DATETIME 型に変換してください!

テーブルに新しいフィールドdata_time_copyを作成しdata、次のクエリを実行します。

# field d is alias for your date_time
UPDATE data
SET date_time_copy = CONCAT(
                         SUBSTRING(d,7,4), '-', SUBSTRING(d,1,2), '-', SUBSTRING(d,4,2), 
                         ' ', SUBSTRING(d,12,5), ':00'
                     )

次に、フィールドを削除し、名前をdate_timeに変更date_time_copydate_timeます。そして、コードを修正してください。

2.フィールドタイプをDATETIMEに変更できない場合は、この不十分な解決策を使用してください(やり過ぎ)

# field d is alias for your date_time
SELECT *
FROM data
WHERE 
    CONCAT(SUBSTRING(d,7,4), '-', SUBSTRING(d,1,2), '-', SUBSTRING(d,4,2)) 
    BETWEEN '2012-09-13' AND '2013-09-15'
于 2012-09-26T21:41:07.893 に答える