请帮我检查一下我的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;
我实际的表格输入如下:
| 编号|类别_许可证|地位|
| - ------| - ------| - ------|
| 小行星98040| D级|1个|
| 小行星970| D级|1个|
在phpmyadmin中运行sql语句后的输出:
| 编号|多布|年龄|
| - ------| - ------| - ------|
| 小行星98040|一九九八年四月一日|二十四|
| 小行星970|一九九七年一月一日|零|
这是我希望在数据库表中返回的预期值。
| 编号|多布|年龄|
| - ------| - ------| - ------|
| 小行星98040|一九九八年四月一日|二十四|
| 小行星970|一九九七年一月一日|二十五|
1条答案
按热度按时间r7xajy2e1#
问题是您想在整个
no_id
上使用TIMESTAMPDIFF
,这是不正确的,因为只有当字符串表示有效的日期时间时,它才能正常工作。对于像
840312135169
这样的示例,情况并非如此,因为末尾的“69”将被读作秒,而一分钟只有60秒。因此,您需要在此列中提供一个有效的日期时间,或者只对列的第一部分(有效日期)运行
TIMESTAMPDIFF
,并忽略其余部分:参见db<>fiddle