gpt4 book ai didi

mysql - 当 SQL 年龄 = 当前日期时更新

转载 作者:行者123 更新时间:2023-11-29 12:04:37 25 4
gpt4 key购买 nike

我将导入表中的数据INSERT INTO插入到我创建的新表中,该表包含有关人员、姓名、地址、出生日期、年龄、性别等的一般信息。

当我插入新表时,导入数据没有年龄,因此我在INSERT INTO之后执行了以下操作:

UPDATE table_a set age = (SELECT timestampdiff(year, dob, curdate()) AS age);

它立即给了我每个人的年龄并相应地更新了该列。

现在我想知道根据当前日期谁过生日:

SELECT name, dob FROM table_a WHERE DAYOFYEAR(dob) - DAYOFYEAR(CURDATE()) = 0;

我的问题是:当他们的出生日期 = 当前日期时,如何进行更新?

这是我尝试过的:

UPDATE table_a set age = (SELECT timestampdiff(year, dob, curdate()) AS age WHERE DAYOFYEAR(dob) - DAYOFYEAR(CURDATE()) = 0);

这是我得到的错误:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE DAYOFYEAR(dob) - DAYOFYEAR(CURDATE()) = 0)' at line 1

我不明白我做错了什么......

运行 MySQL 5.6.25

提前感谢您的回复。

最佳答案

编辑:

这是您更新当天拥有 dob 的用户年龄所需的查询。

UPDATE table_a a
SET a.age = TIMESTAMPDIFF(YEAR, dob, CURDATE())
WHERE a.id IN (
SELECT id
FROM (SELECT * FROM table_a) AS temp_table
WHERE DATE_FORMAT(dob,'%m-%d') = DATE_FORMAT(CURDATE(),'%m-%d')
)

SQLFIDDLE .

您不能使用 DAYOFYEAR,因为它考虑闰年,即此方法将为 2015-07-31 返回 212,但为 2012- 返回 213 07-31.

其次,要在update查询中使用相同的表,它应该用作临时表。说明here .

<小时/>

SQL 语法错误的原因是您在内部查询中缺少 FROM 子句。即SELECT timestampdiff(year, dob, curdate()) ASage WHERE ...。添加FROM table_a

关于mysql - 当 SQL 年龄 = 当前日期时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31748283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com