Mysql获取两个日期之间的表结果

时间:2014-09-19 13:47:08

标签: php mysql sql codeigniter

我知道我的问题与已经回答的其他问题类似但我的问题不同,因为我需要一些替代方案或建议不要如何反过来。

我的问题是:我希望根据用户的需要在两个日期或一个日期之间获取值。

enter image description here

当用户请求一天的数据.. php查询数据成功..但问题是当请求的数据是在两个日期之间..

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE  `meta_transaction_date` >= '$first_date' AND
`meta_transaction_date` <= '$second_date' ");
        return $query->result();

我得到一个空集......

所以我想可能是值不正确提交..所以我回应了这些值,看看它们是否正确。我发现它们是正确的......

  

$ first_date = 09/13/2014;
      $ second_date = 09/19/2014;

但是,如果我尝试将值设置为

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE  `meta_transaction_date` >= '09/13/2014' AND
`meta_transaction_date` <= '09/19/2014' ");
        return $query->result();

我的结果是正确的..所以有什么事情做错了吗?

5 个答案:

答案 0 :(得分:1)

MySQL有一个名为Between的内置函数,您可以这样使用:

SELECT * FROM table_name WHERE date_column BETWEEN 'start_date_parameter' AND 'end_time_parameter'

答案 1 :(得分:1)

meta_transaction_date的类型更改为DATE,因为它就是这样!传入'yyyy-mm-dd'时也使用标准DATE

您的问题可能源于'mm/dd/yyyy'美国日期格式的字符串排序,这种格式对于编码来说非常糟糕。如果您希望以此格式显示DATE,请在SELECT最终输出时进行转换。

答案 2 :(得分:0)

首先尝试转换日期,然后使用between语句:

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE `meta_transaction_date` BETWEEN    
date_format(str_to_date('$first_date', '%d/%m/%Y'), '%Y-%m-%d') AND
date_format(str_to_date('$second_date', '%d/%m/%Y'), '%Y-%m-%d')");

答案 3 :(得分:0)

$query = $this->db->query("SELECT * FROM `meta_receipt_data`
WHERE  `meta_transaction_date` >= '09/13/2014'
AND `meta_transaction_date` <= '09/19/2014' ");

由于以上似乎工作正常,问题出在您的代码中。

$query = $this->db->query("SELECT `meta_transaction_date` FROM meta_receipt_data WHERE
                           meta_transaction_date BETWEEN "
                          .date( "Y-M-d", ( strtotime($first_date) ) )." AND "
                          .date( "Y-M-d", ( strtotime($second_date) ) ) );

建议,不要使用像SELECT *这样的查询,因为它们会降低应用程序的性能。我只是在你的评论中读到你自己的问题:

  

我已将类型设置为Varchar

不要那样做。最好使用DATE类型来存储日期。您可以使用查询:

ALTER TABLE `meta_receipt_data`
MODIFY `meta_transaction_date` DATE NOT NULL;`

好吧,假设您希望保持列不接受空值。

答案 4 :(得分:0)

我发现该值之前和之后都有空格,因此我使用$first = trim($first_date);并解决问题...