在MySQL查询中计算一个人的年龄

这篇博客探讨了在MySQL中使用日期类型存储用户生日的优势,并展示了如何通过SQL查询计算用户当前的年龄。文章详细解释了如何处理即将到来的生日,以确保年龄计算的准确性,同时考虑了闰年的情况。通过示例,展示了如何使用YEAR()函数和IF()函数来调整年龄计算,以确保闰年出生的用户年龄得到正确处理。
摘要由CSDN通过智能技术生成

最近在Phpfreaks.com论坛上提出了一个问题,即有人使用MySQL数据库存储用户出生日期的最佳方式。一个人建议使用varchar,因为他们最熟悉字符串函数。我的回答是使用MySQL日期类型。 

我提供了一个快速的“使用日期的优点”比较列表:
存储为日期
•MySQL日期需要3个字节的存储空间
•您可以在mysql内部执行日期算术(搜索范围内的日期)并使用mysql函数直接计算值查询
•它本质上只存储有效日期
•您可以通过多种方式对其进行格式化

存储为Varchar
•字符串最少需要8个字节,或者10个字符串需要分隔符
•不能执行任何形式的高效本机范围查询
•无法在SQL中轻松地重新格式化
•将允许完全无效的日期

我认为这是一个很好的证明方法是表明你可以让MySQL使用他们的生日计算查询中人的当前年龄。当然使用字符串,例如使用PHP,您通常会查询数据库以提取字符串,并为每一行,将其转换为PHP日期并在代码中进行一些计算,然后您到达同一个地方,但是我想展示SQL的能力 - 在这种情况下,MySQL可以特别是当你使用本机数据类型和一些功能时。

在MySQL查询中计算一个人的年龄


我之前写过关于CURDATE()的文章,它可以让你访问“当前服务器日期”作为比较计算的基础。

要计算一个人当前的年龄,简单的食谱是“今年”减去“出生年份”。

使用MySQL Date类型存储用户生日的优点是,您可以使用YEAR()这样的简单函数来为您提供所需日期的任何部分。


mysql 选择 YEAR  CURDATE  ; 
+ ----------------- + 
 CURDATE  
+ ----------------- + 
           2011 
+ ----------------- + 
1 集合 0.00
 



为了测试这个概念,我们将创建一个简单的用户表,其中包含密钥,名称和生日。 


CREATE TABLE用户 id int AUTO_INCREMENT PRIMARY KEY  name varchar 20  birthdate date  ;
 

 


mysql > describe user; 
+ ----------- ------------- + + ------ + ------ + --------- + ---------------- + 
领域     输入         钥匙默认额外的           
+ ----------- ------------- + + ------ + ------ + --------- + ---------------- + 
id        int 11      没有   PRI NULL     auto_increment 
名字       varchar 20  |是的       NULL                    
生日日期        是的       NULL                    
+ ----------- ------------- + + ------ + ------ + --------- + ---------------- + 
3 集合 0.27
 



现在我们将添加一些用户行:


INSERT INTO用户姓名生日 VALUES 'Fran'  '1967-10-31'  ; 
INSERT INTO用户姓名生日 VALUES 'Bill'  '1964-05-07'  ; 
INSERT INTO用户姓名生日 VALUES 'Jimmy'  '1965-04-27'  ; 
INSERT INTO用户名称生日 VALUES 'Stacy'  '2002-11-30'  ; 
INSERT INTO用户姓名生日 VALUES 'George'  '2007-10-25'  ;
 

 


mysql select * from user; 
+ ---- + -------- + ------------ + 
id 名字   生日   
+ ---- + -------- + ------------ + 
 弗兰   1967 - 10 - 31 
 比尔   1964年 - 05 - 07年
 吉米   1965 -04- 27 
 Stacy   2002 - 11 -30 
 乔治2007 - 10 - 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值