0

对不起,我已经搜索了线程并尝试了直到我的大脑受伤,但我不得不寻求帮助。

我有一张名为“Horse”的桌子,上面有 ID、姓名、出生(仅限年份)、颜色、死亡。

我需要返回死去的马的年龄,然后乘以 3 得到人类年龄,并显示马 ID、名称和人类年龄。

我被困在第一个障碍。我不能让桌子返回马的年龄。

我正在使用另一个 SO 用户的建议;

选择 DATEDIFF(horse.born, '2012') / 365.25 作为人类年

但是,这将返回 Null。

还尝试了一个 CURDATE:

CURDATE('%Y%') - 生于马年;

不好。有小费吗?

4

2 回答 2

0

以下假设出生是“int”,而死是“日期”:

select (Year(died)-born) * 3 from horse where died is not null

(此外,由于所有赛马都被认为是在 1 月 1 日出生,因此可以忽略小数年份)。

于 2012-07-22T23:57:41.287 回答
0

如果您的列Born仅包含一年(大概是整数?),您将无法对其执行日期数学运算。而且您可能会遇到列名(例如Human Years其中包含空格)的麻烦。或者这是一个错字?

无论如何,尝试类似:

SELECT Id, Name, (YEAR(CURDATE()) - Born) * 3 AS Human_Years
  FROM horse
  WHERE Died IS NOT NULL

还是Died日期字段?在这种情况下,您可能想要类似的东西:

SELECT Id, Name,
  (DATEDIFF(Died, STR_TO_DATE(CONCAT(Born, "-08-01"),"%Y-%m-%d")/365.25 * 3 AS Human_Years
  FROM horse
  WHERE Died IS NOT NULL
于 2012-07-22T23:59:32.113 回答