MySQL:获取创建日期字符串比给定日期字符串更新的行

时间:2015-02-05 12:01:39

标签: mysql prepared-statement string-comparison

我正在尝试使用以下代码创建一个预准备语句:

$statement = $db->prepare("SELECT * FROM myTable WHERE 
    STR_CMP(creationDate, $startingDate) = 1 ORDER BY creationDate DESC ");

我也试过这个:

$statement = $db->prepare("SELECT * FROM myTable WHERE 
    (creationDate > $startingDate) = 1 ORDER BY creationDate DESC ");

但是我得到了空$statement。我的目标是获得它的创建日期比给定日期字符串更新的行。我的creationDate列存储为字符串。

我已经记录了我的查询字符串,它看起来像:

SELECT * FROM myTable WHERE (creationDate > 05.02.2015 14:08:31) = 1 ORDER BY creationDate DESC

我做错了什么?

2 个答案:

答案 0 :(得分:0)

1)您必须比较日期。

SELECT * FROM myTable WHERE 

DATE_FORMAT(STR_TO_DATE(creationDate, '%d.%m.%Y %H:%i:%s'),'%d.%m.%Y %H:%i:%s')

> '.$startingDate.'  ORDER BY creationDate DESC

提示

2)将日期存储在DB中作为日期而不是字符串

3)您的日期字符串似乎无效? 为什么不YYYYMMDD。

ORDER BY creationDate DESC可能会造成意外的冲击

答案 1 :(得分:0)

我通过在我的数据库的phpMyAdmin sql查询部分中尝试查询字符串解决了我的问题。当我构建我的查询时,我已经重新开始了:

$statement = $db->prepare("SELECT * FROM myTable WHERE 
    (creationDate > $startingDate) = 1 ORDER BY creationDate DESC ");

变成:

SELECT * FROM myTable WHERE (creationDate > 05.02.2015 14:08:31) = 1 
    ORDER BY creationDate DESC

MySql给出了05.02.2015 14:08:31

的错误

所以我准备了这样的声明:

$queryString = 'SELECT * FROM arendi_ideas WHERE (creationDate > "'.$startingDate.'") = 1 ORDER BY creationDate DESC';
$this->logger->debug("GetIdeasNewerThan: Query string = $queryString");
$this->statement = $this->db->prepare($queryString);

它工作正常。