1

特定の日付のデータベース内の値を取得できません

サンプル値:

$from= 12/15/2012 $to= 12/15/2012
$from= 12/16/2012 $to= 12/16/2012
$from= 12/17/2012 $to= 12/17/2012

phpスクリプト:

$query=" select * from call where (date_time BETWEEN '$from' AND '$to') ORDER BY date_time DESC";

日付を取得しているテーブルの値には時間があります

私のデータベースのex値:

12/15/2012 2:51
12/15/2012 2:21
12/15/2012 2:55
12/15/2012 3:12
12/16/2012 2:51
12/16/2012 2:21
12/17/2012 2:55
12/17/2012 3:12

検索しfrom 12/15/2012 to 12/15/2012 ても、の値が表示されません

12/15/2012

しかし、私が検索した場合

から12/15/2012 to 12/16/2012

2012年12月15日の値だけでなく、2012年12月16日の値も表示されます

その特定の日付のすべての値のみを囲むことができるようにするにはどうすればよいですか?

4

2 に答える 2

4

まず、時間の値をDATETIME(または場合によってはTIMESTAMP) 列に格納する必要があります。次に、この質問に対する回答に従ってください。

ただし、文字列でこれを行うことを本当に主張する場合は、いつでもLIKE比較を使用できます。

SELECT * FROM `call` WHERE date_time LIKE '12/15/2012 %'

( sqlize.com のデモ)

もちろん、これは 1 日 (または、適切な修正を加えれば、1 時間、1 分、1 か月、1 年など) のすべてのレコードを検索する場合にのみ機能します。より複雑な選択基準が必要な場合は、実際のDATETIME列に切り替えることを強くお勧めします。

于 2012-12-29T21:50:41.993 に答える
3

日付を日時フィールドとして保存していると仮定すると、データをDateタイプに変換する必要があります。

あなたが書くとき:

$from= 12/15/2012

PHPは除算を行います:12/15そして(12/15)/ 2012

アプローチは文字列として宣言$fromされ、クエリで日付にキャストされます。

$from= '12/15/2012'
...
"select * from call where (date_time BETWEEN STR_TO_DATE('$from', '%m/%d/%Y') ..."

インデックスに適したプランの正しいクエリは次のとおりです。

select * 
from   `call` 
where  date_time >= STR_TO_DATE('$from', '%m/%d/%Y') and 
       date_time < date_add( STR_TO_DATE('$to', '%m/%d/%Y'), interval 1 day)

sqlfiddleでそれを参照してください

于 2012-12-29T21:54:45.920 に答える