2011-02-24 117 views
0

我有一個MySql數據庫,它使用時間戳字段來跟蹤插入條目的時間。MySql查詢日期範圍在PHP中

現在我想通過日期範圍查詢表中的條目。

我寧願使用MySql來提取記錄,而不是提取所有記錄,然後迭代和比較PHP中的日期。

所以我有一個開始日期和結束日期。我曾嘗試YYYYMMDD和YYYY-MM-DD格式,這兩種類型的查詢沒有成功:

// this doesn't appear to be working 
SELECT COUNT(*) FROM table_name 
WHERE DATE(timestamp_row) BETWEEN '{$date1}' AND '{$date2}; 

// this doesn't appear to be working either 
SELECT COUNT(*) FROM table_name 
WHERE DATE(timestamp_row) >= {$date1} 
AND DATE(timestamp_row) <= {$date2}; 

看來,mysql的date()函數打開的時間戳爲這種格式: YYYY-MM-DD

有沒有辦法做到這一點。

+2

如果您提供了像這樣的YYYY-MM-DD字符串,用單引號括起來,查詢就可以按您的需要工作。這裏有其他的錯誤,我看不到。 'timestamp_row'不是TIMESTAMP/DATETIME/DATE類型列嗎? – 2011-02-24 18:29:56

+1

您是否使用實際日期值而不是'{$ date1}'等來嘗試它? – sdleihssirhc 2011-02-24 18:30:23

+0

@dan timestanp_row是一個mysql類型的時間戳。我會嘗試使用靜態數字來查看是否有效。 – OneNerd 2011-02-24 19:00:05

回答

0

您正在使用哪些字段類型? 1. DATETIME, 2. DATE, 3. TIMESTAMP

由於SELECT COUNT(*)FROM TABLE_NAME WHERE DATE(timestamp_row) '之間{$ DATE1}' 和「{$ DATE2};看起來不錯,如果你使用特定的值而不是'{$ date1}'和'{$ date2};在行中格式化的方式可能有問題嗎?

可以自動轉換到無效的日期爲有效等價這樣的:

SELECT「2008年2月31日」 +間隔0天;

2008-03-02

0

你可以試試這個

SELECT COUNT(*) FROM table_name WHERE timestamp_row BETWEEN '2011-01-01 00:00:00' AND '2011-01-31 23:59:59'; 

有沒有必要使用MySQL的日期功能在您的原始查詢。

0

你是做用戶的B'Day日期,因此希望這將是做格式化和日期選擇的伎倆

select id from my_table 
where 
timestamp < date_format(date_add(CURRENT_TIMESTAMP(), interval 1 day), 
      '%Y%m%d000000') AND timestamp >= date_format(CURRENT_TIMESTAMP(), 
      '%Y%m%d000000') 
0

ISEARCH的通過ID數據,但日期是錯誤的。這顯示1970/01/01

       $book_year= Date("Y", strtotime($year)); 
      $book_month= Date("m", strtotime($month)); 
      $book_day=Date("d", strtotime($day)); 
      $book_date=$year."/". $month."/". $day; 
        $book_date= Date("Y-m-d", strtotime($book_date));