需要根据出生年份使用TIMESTAMPDIFF()函数计算年龄,但有些行返回空值



请有人帮我检查我的sql语句。我想计算人的年龄基于年,但有一些行不返回实际值。但零。请原谅我的英语。希望你们能理解我的问题。这是我的sql语句:

select no_id,
case when substring(no_id,1,2) <Substring(YEAR(NOW()),-2) 
then Concat('20',substring(no_id,1,2),'-'  ,substring(no_id,3,2),'-', substring(no_id,5,2))
else
Concat('19',substring(no_id,1,2),'-'  ,substring(no_id,3,2),'-', substring(no_id,5,2))
end as dob, TIMESTAMPDIFF(YEAR, no_id, CURDATE()) AS age
from driver_details;

我的实际表输入如下:

tbody> <<tr>
no_idcategory_licensestatus
980401001121D1
970101110101D1

问题是您想在整个no_id上使用TIMESTAMPDIFF。这是不正确的,因为只有当字符串表示有效的日期时间时,这才会正确工作。

对于您的样本,如840312135169,情况并非如此,因为"69"最后会被读成秒,但是一分钟只有60秒。

因此,您需要在此列中提供有效的日期时间,或者仅在列的第一部分(有效日期)上运行TIMESTAMPDIFF,并忽略其余部分:

select no_id,
case when substring(no_id,1,2) <Substring(YEAR(NOW()),-2) 
then Concat('20',substring(no_id,1,2),'-'  ,
substring(no_id,3,2),'-', substring(no_id,5,2))
else Concat('19',substring(no_id,1,2),'-'  ,
substring(no_id,3,2),'-', substring(no_id,5,2)) 
end as dob,  
TIMESTAMPDIFF(YEAR, substring(no_id,1,6), CURDATE()) AS age -- changed here
from driver_license;

,看到db&lt的在小提琴

最新更新