获取有关某人XX岁时的所有信息

时间:2017-11-09 18:16:17

标签: sql date mariadb date-of-birth

我将一个人的生日存储为/person/10/age/25在数据库中。如果我转到页面FLOOR(DATEDIFF(CURRENT_DATE, STR_TO_DATE(date_birth, '%Y-%m-%d')) / 365.25),我希望根据他或她的生日,获取此人25岁时的所有数据。

目前,我正在使用DATE根据SELECT * FROM images AS i JOIN people AS p ON i.id_person = p.id WHERE p.id = '10' # new line AND i.date_taken = DATE_ADD(p.date_birth, INTERVAL 25 YEAR) # old line # AND p.date_birth = FLOOR(DATEDIFF(CURRENT_DATE, STR_TO_DATE(date_birth, '%Y-%m-%d')) / 365.25) 获取此人的年龄。但是我想要一些如何扭转这个公式(正确的词?),这样就可以得到关于这个人的所有信息,从他或她25岁开始。

SQL查询:

CREATE TABLE IF NOT EXISTS `images` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_person` int(11) NOT NULL,
  `date_taken` date DEFAULT NULL,
  UNIQUE KEY `id` (`id`)
);

CREATE TABLE IF NOT EXISTS `people` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data_name` tinytext NOT NULL,
  `date_birth` date NOT NULL,
  UNIQUE KEY `id` (`id`)
)

以下是数据库的外观:

{{1}}

http://sqlfiddle.com/#!9/6d1cfc/2

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

首先:不要以这种方式进行日期操作(特别是使用365.25作为年份乘数)相反,请查看DateAdd函数。

(呃,有一个很长的帖子打了出来,只有在发帖后才注意到你在MariaDB而不是MSSQL)

无论如何,你正在寻找类似的东西:

DATEADD(dateOfBirthValue,间隔25年)

...这将为特定日期值增加25年。希望有所帮助 - 我无法真正发布代码片段,因为我不熟悉MariaDB的详细信息(但我知道您将要使用DateADD而不是手动计算天数。)