将mysql datetime字段与字符串datetime进行比较

时间:2013-05-07 19:37:11

标签: php

我有一个如下函数从mysql数据库中提取记录。

function getMember($read, $selected_joined_date) {
  $sql = "SELECT first_name, last_name, member.joined_date
          FROM user 
          INNER JOIN member USING (user_id)
          WHERE user.joined_date > $selected_joined_date
          ORDER BY joined_date";
  return $read->fetchAll($sql);
}

显示为

的dipslays错误消息
  

' SQLSTATE [42000]:语法错误或访问冲突。

字段' joined_date'是表中的日期时间格式,$ selected_joined_date是  字符串格式。

如何比较不同类型的日期时间格式?

4 个答案:

答案 0 :(得分:0)

您可以使用mysql提供的Date()函数将字符串格式转换为Date

 mysql> SELECT DATE('2003-12-31 01:02:03');
        -> '2003-12-31'

您的查询将如下所示: 获得MySql解决方案,您可以使用str_to_date函数as;

 mysql>select str_to_date('2012-10-12 10:20:30','%Y-%m-%d %H:%i:%s');

所以你的Sql String将是,

$sql = "SELECT first_name, last_name, member.joined_date
      FROM user 
      INNER JOIN member USING (user_id)
      WHERE user.joined_date >str_to_date('$selected_joined_date','%Y-%m-%d %H:%i:%s')
      ORDER BY joined_date";
// Provided that string selected_joined_date is in format 2012-10-12 10:20:30

答案 1 :(得分:0)

在查询中,您的字符串需要引号。

$sql = "SELECT first_name, last_name, member.joined_date
        FROM user 
        INNER JOIN member USING (user_id)
        WHERE user.joined_date > '$selected_joined_date'
        ORDER BY joined_date";

答案 2 :(得分:0)

Mysql喜欢“2013-05-07 15:30:00”格式的日期时间,php几乎可以处理任何事情。

您可以将$ selected_join_date转换为该格式,如下所示:

$selected_join_date = date("Y-m-d H:i:s", strtotime($selected_join_date));

假设$ selected_join_date采用php的一种可接受格式:http://www.php.net/manual/en/datetime.formats.php

然后你可以将字符串传递给mysql,它会愉快地比较它们。 Rocket Hazmat指出,变量(以及字符串日期时间)需要在sql的引号内。

答案 3 :(得分:0)

我出于好奇心做了一点测试,php日期格式是否必须与mysql datetime格式相同。 原来,格式并不重要。 如果PHP变量为Mysql Date and Time格式,则搜索成功。

默认的mysql日期时间格式:

YYYY-MM-DD HH:MM:SS

用于搜索数据库的格式:

'Y-m-d H:i:s'
'Y/m/d H:i:s'
'Y/m/d'
'YmdHis'
'Ymd'

使用DateTime::createFromFormat()函数

格式化的日期

问题,除了查询中的$selected_joined_date变量需要在引号内,似乎在其他地方。