我将一个人的生日存储为/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
我该如何做到这一点?
答案 0 :(得分:0)
首先:不要以这种方式进行日期操作(特别是使用365.25作为年份乘数)相反,请查看DateAdd函数。
(呃,有一个很长的帖子打了出来,只有在发帖后才注意到你在MariaDB而不是MSSQL)
无论如何,你正在寻找类似的东西:
DATEADD(dateOfBirthValue,间隔25年)
...这将为特定日期值增加25年。希望有所帮助 - 我无法真正发布代码片段,因为我不熟悉MariaDB的详细信息(但我做知道您将要使用DateADD而不是手动计算天数。)