SQL - 带有IF语句的CONCAT返回1583错误

时间:2017-07-09 13:46:52

标签: mysql sql phpmyadmin

CONCAT功能是否存在限制,因此无法处理IF语句?我有这个查询,如果它不是CONCAT的一部分,但是只要我把它放在一个CONCAT函数中就会出现这个错误:#1583 - 调用本机函数'CONCAT'时参数不正确< /强>

SELECT CONCAT((IF(DAYOFYEAR(`deathdatetr`) and DAYOFYEAR(`birthdatetr`),TO_DAYS(`deathdatetr`) - TO_DAYS(`birthdatetr`),(YEAR(`deathdatetr`) - YEAR(`birthdatetr`)) * 365))/365.25 as totaldays, " years old") from tng_people order by totaldays limit 1;

此查询应返回数据库中最早的人(年龄)。我要查询的表包含“1860-07-30”格式的出生和死亡日期。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

你的括号搞砸了。表达式中间有一个列别名。 MySQL被混淆并不奇怪,因为你似乎也是如此。

使用任何表达式的if()都可以。我更喜欢CASE(这是标准的),但因为你从IF()开始:

SELECT CONCAT(IF(DAYOFYEAR(`deathdatetr`) = DAYOFYEAR(`birthdatetr`),
                 TO_DAYS(`deathdatetr`) - TO_DAYS(`birthdatetr`),
                 (YEAR(`deathdatetr`) - YEAR(`birthdatetr`)) * 365)
                ) /365.25, ' years old') as total_years
from tng_people
order by totaldays
limit 1;

我不知道这个逻辑应该做什么。它看起来并不有用,但这是另一回事。

如果你想要日期之间的日子:

select (to_days(deathdatetr) - to_days(birthdatetr)) as total_days

答案 1 :(得分:0)

感谢@Gordon的帮助,我明白了。显然CONCAT()无法处理我认为称为别名的东西,所以一旦我从CONCAT()(“... as total_days”)中删除它,我的查询工作正常。

SELECT CONCAT ("A", FLOOR((to_days(`deathdatetr`) - to_days(`birthdatetr`))/365.25) ) from tng_people order by (to_days(`deathdatetr`) - to_days(`birthdatetr`)) DESC limit 1 

感谢您的帮助!