Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL基于出生日期计算年龄_Mysql_Sql_Date - Fatal编程技术网

MySQL基于出生日期计算年龄

MySQL基于出生日期计算年龄,mysql,sql,date,Mysql,Sql,Date,我正在尝试使用SQL语句根据MySQL中的生日计算年龄 我的出生日期是varchar(),格式是:1994年11月29日(DD/MM/YYYY) 我的SQL语句: SELECT DATEDIFF(YY, birthDate, GetDate()) AS Age FROM bookedevent be INNER JOIN account a ON be.bookedEventBY = a.accountName WHERE a.accountID = 1 然而,当我在MySQL workben

我正在尝试使用SQL语句根据MySQL中的生日计算年龄

我的出生日期是varchar(),格式是:1994年11月29日(DD/MM/YYYY)

我的SQL语句:

SELECT DATEDIFF(YY, birthDate, GetDate()) AS Age
FROM bookedevent be INNER JOIN account a
ON be.bookedEventBY = a.accountName WHERE a.accountID = 1
然而,当我在MySQL workbench中测试时,我得到了以下错误消息:调用DATEDIFF中的参数计数不正确

有导游吗


提前感谢。

您正在MySQL中使用SQL Server语法。那不行。您可以使用
TIMESTAMPDIFF()

请注意,
TIMESTAMPDIFF()
的语义不同于SQL Server中的
DATEDIFF()
。但是,
TIMESTAMPDIFF()
可能更接近您真正想要的内容。

使用此代码

  SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthDate, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthDate, '00-%m-%d')) AS age
FROM bookedevent be INNER JOIN
     account a
     ON be.bookedEventBY = a.accountName
WHERE a.accountID = 1;
选择日期格式(现在(),'%Y')-日期格式(出生日期,'%Y')-(日期格式(现在(),'00-%m-%d')<日期格式(出生日期,'00-%m-%d'))作为年龄
从bookedevent内部连接
帐户a
ON be.bookedEventBY=a.accountName
其中a.accountID=1;

当我测试SQL时,我得到了空值。是不是因为我的生日列是varchar()?可能吧。您应该将日期存储为日期,而不是字符串。是否要将字符串转换为日期?因为我无法更改该表的数据结构,因为我的朋友也在使用它,尽管我已经得到了它。您可以这样做:str_to_date(例如,eventDate,'%d/%m/%Y')。谢谢!有没有办法把1-10岁的人分成一组。然后将11-20作为另一个使用SQL语句的组使用?使用date(GetDate())-而不是缺少
birthDate
的对象吗?不正确的
内部联接
,因为您没有指定
出生日期
所属的位置。要么是。
出生日期
要么是。
出生日期
  SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthDate, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthDate, '00-%m-%d')) AS age
FROM bookedevent be INNER JOIN
     account a
     ON be.bookedEventBY = a.accountName
WHERE a.accountID = 1;