2

私がPHPのスタートアップの学生だったとき、日付と時刻を一緒に保存するデータベースを作成しました。今では大きな問題があります。すでに3000を超える注文がデータベースにありますが、日付で検索したい場合は日付と時刻が1つのフィールドにまとめられているため、大きな問題が発生しました。次のようなクエリを作成しようとしましたが、where date LIKE '%$date'結果が得られません。誰かが今何ができるかわかりませんか?

また、データベース全体を変更するにはどうすればよいですか。すべての日付と時刻を個別に変更し、データベースに影響を与えないようにする必要があります。

アップデート:

データベース内のデータは次のようになります。10/16/2012 5:00pm

助けに感謝します。

4

5 に答える 5

5

なぜ%$ date?反対のことをする必要があります。

WHERE date LIKE "".$date."%"
于 2012-06-20T16:30:33.820 に答える
2

次のことができます。

$date = "2012-03-08";
$sql = "SELECT * FROM table WHERE date => '$date 00:00:00' AND date =< '$date 23:59:59'

編集:あなたの編集を見て、これはもう機能しません。日付列を適切なMySQL日時またはTIMESTAMPタイプに変換する必要があります。

現在のデータベース設計では、次のようなものを使用できます。

日にち

$date = "10/16/2012";
$sql = "SELECT * FROM table WHERE date LIKE '$date%'

時間

$time = "5:00pm";
$sql = "SELECT * FROM table WHERE date LIKE '%$time'
于 2012-06-20T16:30:32.707 に答える
2

あなたの質問のセクションに答えて:

1.現在のスキーマで必要な日付を検索します。

編集内容に基づいて、以下を使用します。

 <?php

 $query = "SELECT * FROM table_name WHERE `date` LIKE '{$date}%'";

 ?> 

あなたが投稿したものと同様のクエリがあなたを助けるはずです:

<?php

$query = "SELECT * FROM table_name WHERE `date` LIKE '%{$date}%'";

?>

%質問()での使用は、'%$date'で終わる値にのみ一致しますが$date、私の例('%{$date}%')のパターンは、$dateどこかにある値に一致することに注意してください。または、値の先頭の日付を一致させるために使用することもでき'{$date}%'ます-どちらが必要かわからない。

2.スキーマを更新して、日付と時刻を2つの列に分割します。

ここで実行する必要がある最初のステップは、テーブルに2つの列(date_onlyおよび)を追加することです。次に、現在使用している「オールインワン」列に加えtime_onlyて、この情報を処理および保存するようにコードを更新します。1つのステップで切り替えることによって、現在のコードベースを壊したくありません。日付/時刻データが希望どおりに書き込まれていることを確認できたら、3番目のステップは、新しい日付/時刻列からの本番読み取りとともに読み取り(およびログ記録)することです。読み取りが計画どおりに機能していることを確認できたら、開発環境を切り替えて新しい列から読み取り、すべてが機能することを確認するまでテストします。datedate

于 2012-06-20T16:34:34.777 に答える
1

DATETIME フィールドの場合は、

WHERE DATE(datetime_field) = '01-01-2012';

または(インデックスを使用できるため、より良い)

WHERE datetime_field >= '01-01-2012 00:00:00' AND datetime_field <= '01-01-2012 23:59:59';
于 2012-06-20T17:47:51.347 に答える