结果是简单的 “1”,因为你选择一个布尔表达式。
也就是说,X < Y
只返回0或1.
在MySQL中进行日期算术有一个更简单的方法。 DATEDIFF()函数返回两个日期之间的天数。
$query = "SELECT FLOOR(DATEDIFF(NOW(), f_nacimiento)/365.25) AS age
FROM PACIENTES
WHERE id_paciente = ?";
if (($stmt = $pdo->prepare($query)) === false) {
die(print_r($pdo->errorInfo(), true));
}
$id_paciente = $_GET["id_paciente"];
if ($stmt->execute(array($id_paciente)) === false) {
die(print_r($stmt->errorInfo(), true));
}
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row["age"] . "\n";
}
我测试了这个表如下:
CREATE TABLE `PACIENTES` (
`id_paciente` int(11) NOT NULL AUTO_INCREMENT,
`f_nacimiento` date DEFAULT NULL,
PRIMARY KEY (`id_paciente`)
) ENGINE=InnoDB;
PS:上面的示例代码显示了PDO编程的另外两个重要的习惯:
- 使用查询参数,做不直接将字符串插入到SQL中。
- 检查从prepare()和execute()返回的错误状态。
回复您的意见,需要在今后几年里显示年龄,个月。这里是我的第二次尝试(与天抛出的乐趣):
SELECT TIMESTAMPDIFF(YEAR
, f_nacimiento
, NOW()
) AS Years,
TIMESTAMPDIFF(MONTH
, f_nacimiento
+ INTERVAL TIMESTAMPDIFF(YEAR, f_nacimiento, NOW()) YEAR
, NOW()
) AS Months,
TIMESTAMPDIFF(DAY
, f_nacimiento
+ INTERVAL TIMESTAMPDIFF(MONTH, f_nacimiento, NOW()) MONTH
, NOW()
) AS Days
FROM PACIENTES
WHERE id_paciente = 1;
重复的手动输入http://dev.mysql.com/doc/refman/5.0/zh-CN/date-calculations.html –