2011-02-24 216 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));