我有两列的表格。第一列是个人ID号,第二列是名称。我需要使用其ID号(包含出生日期)来总结5至16岁(大于5岁且小于16岁)范围内的孩子。
示例:
ID Name
_________________________
0906013123588 | Name1
1508007128536 | Name2
1603008120746 | Name3
2705983123601 | Name4
0101018125432 | Name5
结果应为:3
ID号的前7位数字代表出生日期,接下来的6位数字是控制号码(目前我不感兴趣)。
答案 0 :(得分:5)
解决方案是清理数据库设计。 您可以创建一个新表,然后以编程方式将数据转换到该新表。 您的新表应包含date_of_birth的单独日期列。
我认为MySql无法处理yyy格式。 它可以处理yy或yyyy。 https://www.w3schools.com/sql/func_mysql_date_format.asp
如果格式正确,则可以执行以下操作:
SELECT *
FROM person_table
WHERE
DATEDIFF(
CURRENT_DATE,
STR_TO_DATE(
SUBSTRING(
CONVERT (ID,char)
,0,6
),'%d%m%y'
)/365
BETWEEN 5 AND 16
答案 1 :(得分:2)
我不会为此目的使用new
。我只需将出生日期与适当的出生日期范围进行比较:
datediff()
您需要注意两位数的年份。毕竟,身份证不能很好地处理100岁以上的人。