-
算出当前系统后某个月的日期_还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了!...
2021-01-09 12:43:01文档日期:2019年12月20日转译自 How To Calculate Age From Date Of Birth In MySQL- Querychat,...本文中看我们尝试SQL 年龄计算 —— 组件MySQL没有开箱即用的工具,用于计算年龄。所以,这也阻挡不了我们求知的...文档日期:2019年12月20日
转译自 How To Calculate Age From Date Of Birth In MySQL- Querychat,中文转载,请注明出处。
使用SQL语句计算年龄,在事务处理和日期计算中,较为常见。MySQL提供了许多日期函数,可以自由发挥。本文中看我们尝试
SQL 年龄计算 —— 组件
MySQL没有开箱即用的工具,用于计算年龄。所以,这也阻挡不了我们求知的热情。工具不够,自己来凑。没有直接的函数,我们就用给的函数,组装出来一个。
说白了,年龄就是啷个日期差。当前日期,减去生日。那就是年龄。
MySQL已经提供的函数,下面介绍一下:
- CURDATE() – 返回当前日期
- TIMESTAMPDIFF() – 计算时间差,差值单位自定义
这俩函数就够了,日期差,获取年差值,月差值,或者其他。
CURDATE() 返回MySQL服务器运行时间。无需传参,调用如下:
CURDATE()
TIMESTAMPDIFF() 调用格式如下:
TIMESTAMPDIFF(unit, begin_date, end_date)
单位unit决定了返回数值。unit的可选项如下:
- YEAR
- QUARTER
- MONTH
- WEEK
- DAY
- HOUR
- MINUTE
- SECOND
- MICROSECOND
那,我们试着组合起来,写个公式:
SELECT TIMESTAMPDIFF(YEAR, '2018-01-20', '2019-01-21');
上述SQL语句运行后返回 1.
修改一下参数:
SELECT TIMESTAMPDIFF(DAY, '2018-01-20', '2019-01-21');
返回的是 366
SQL 计算年龄 —— 组合起来
学习了两个函数的使用方法,下面计算两个日期相差的年份:
TIMESTAMPDIFF(YEAR, dob, CURDATE())
上式dob字段,在传递给TIMESTAMPDIFF函数之前,需要转化解析为日期格式字符串,才能正常使用。
当前日期是2019年12月20日, 假定生日是1978年8月3日,计算如下:
SELECT TIMESTAMPDIFF(YEAR, '1978-08-03', CURDATE());
计算结果 41.
MySQL 计算年龄 —— 提高精度
上面的式子,计算出了正确的年龄。但是如果日期格式不完整,缺少月份,或者日期,都不能计算出来结果。
对应同一个月份,或者同一年的日期,计算差值,年总是=0。因此我们提高精度:
TIMESTAMPDIFF(MONTH, dob_field, CURDATE())
计算两个日期差的月数。
以此类推:
TIMESTAMPDIFF(DAY, dob_field, CURDATE())
计算两个日期差的天数。
举一反三,我们可以相应的计算日期差的月份,和天数。 例如
TIMESTAMPDIFF( MONTH, dob_ field, CURDATE() ) % 12
计算月部分:TIMESTAMPDIFF( DAY, dob_ field, CURDATE() ) % 30.4375
计算天部分:组合在一起,就是完整的年龄表达式:
SELECT CONCAT(TIMESTAMPDIFF( YEAR, dob_ field, CURDATE() ),' Years,', TIMESTAMPDIFF( MONTH, dob_ field, CURDATE()) % 12,' Months,',FLOOR( TIMESTAMPDIFF( DAY, dob_ field, CURDATE() ) % 30.4375 ),' Days')
其中dob_ field是包含生日的字段,或变量.
举例说明
创建一张表,字段包含姓名,还有生日:
DROP TABLE IF EXISTS T1; CREATE TABLE T1( student_name VARCHAR(100), dob date, age_year INT, age_month INT, age_days INT, age_formatted VARCHAR(200) );
创建数据库 test_age,然后创建表 t1。
写入一些随机数据:
INSERT INTO t1(student_name, dob) values ('Jennifer Brit', '1990-02-20'); INSERT INTO t1(student_name, dob) values ('David Dunkrick', '1988-12-20'); INSERT INTO t1(student_name, dob) values ('Michelle Morris', '2001-08-03'); INSERT INTO t1(student_name, dob) values ('Ubaid Ali', '1987-10-19'); INSERT INTO t1(student_name, dob) values ('Juliet Cross', '2019-01-25');
下面我们根据生日dob字段,分别计算并更新 age_year, age_month, age_days 和age_formatted。运行以下SQL语句:
UPDATE T1 SET AGE_FORMATTED = CONCAT( TIMESTAMPDIFF( YEAR, DOB, CURDATE() ), ' YEARS,', TIMESTAMPDIFF( MONTH, DOB, CURDATE()) % 12, ' MONTHS,', FLOOR( TIMESTAMPDIFF( DAY, DOB, CURDATE() ) % 30.4375 ), ' DAYS' ), AGE_YEAR = TIMESTAMPDIFF( YEAR, DOB, CURDATE() ), AGE_MONTH = TIMESTAMPDIFF( MONTH, DOB, CURDATE()) % 12, AGE_DAYS = FLOOR( TIMESTAMPDIFF( DAY, DOB, CURDATE()) % 30.4375 );
更新完毕之后,查看结果
SELECT * FROM T1;
OK,一切结束,拿上SQL语句去数据库上测试一下吧。
-
SQL Server日期计算第1/2页
2020-12-15 06:17:14你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序... -
SQL Server各种日期计算方法(收藏)
2020-12-15 08:25:47你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文 章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的... -
中文版Excel.2007公式与函数应用宝典 1/2
2012-04-06 18:29:446.2.1 显示当前日期 6.2.2 显示任意日期 6.2.3 生成一系列日期 6.2.4 把非日期字符串转换为日期 6.2.5 计算两个日期之间的天数 6.2.6 计算两日期之间的工作日数 6.2.7 计算指定王作日的日期 6.2.8 计算两日... -
中文版Excel.2007公式与函数应用宝典 2/2
2012-04-06 18:37:146.2.1 显示当前日期 6.2.2 显示任意日期 6.2.3 生成一系列日期 6.2.4 把非日期字符串转换为日期 6.2.5 计算两个日期之间的天数 6.2.6 计算两日期之间的工作日数 6.2.7 计算指定王作日的日期 6.2.8 计算两日... -
数据库系统基础:高级篇(第5版)(讲述数据库系统原理的经典教材)--详细书签版
2013-04-05 14:33:11出版日期:2008 年1月 开本:16开 页码:300 版次:5-1 内容简介 本书是一本讲述数据库系统原理的经典教材,重点强调了数据库的设计与实现。全书分为4部分。第一部分讲述事务处理的概念、并发控制技术和数据库... -
SQL中DATEADD和DATEDIFF的用法示例介绍
2020-12-15 18:28:10你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期! 在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序... -
Linux操作系统基础教程
2013-04-08 21:34:26Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux Torvalds (Torvalds@kruuna.helsinki.fi)写了 Linux核心程序的 0.02 版开始的,但其后的发展却几乎都 是由互联网上的 Linux社团(Linux Community)互通... -
delphi 开发经验技巧宝典源码
2010-08-12 16:47:230186 获得系统当前日期 122 0187 将日期时间格式化为指定格式 122 0188 计算两个日期之间相差的天数 123 0189 根据指定日期返回星期几 123 0190 将日期转换为字符串 124 0191 判断日期是否改变 124 0192... -
excel的使用
2012-11-25 17:06:01(3) 日期的输入如果要输入“4月5日”,直接输入“4/5”,再敲回车就行了。如果要输入当前日期,按一下“Ctrl+;”键。(4) 填充条纹如果想在工作簿中加入漂亮的横条纹,可以利用对齐方式中的填充功能。先在一... -
用TCP/IP进行网际互联 第三卷:客户-服务器编程与应用(Linux/POSIX套接字版)--详细书签版
2012-10-12 14:44:57目前从事软件需求工程、网络协议验证形式化方法以及函数式语言等方面的研究。 目录 封面 -29 封底 -28 书名 -27 版权 -26 出版说明 -25 关于作者 -22 前言 -21 序言 -20 目录 -18 第1章 引言和概述 1 1.1 使用... -
SQL Server 2008实战(SQL Server程序员和DBA不可或缺的权威参考手册)--详细书签版
2013-02-06 11:52:198.5.4 找出两个日期的差 236 8.5.5 显示日期一部分的字符串值 237 8.5.6 使用DATEPART显示日期一部分的整数值 237 8.5.7 使用YEAR、MONTH和DAY显示日期一部分的整数值 238 8.6 类型转换 238 8.6.1 转换... -
SQL Server 2008数据库设计与实现(关系数据库实现的通关宝典)--随书源代码
2013-02-06 12:04:00本书深入浅出地介绍了目前世界上最受欢迎的数据库管理系统之一——sql server。全书共分三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念建模到在 sql server 2008上真正... -
C#程序开发范例宝典电子书从1-471例后面的暂时没有
2008-10-16 21:15:36实例238 列出系统中的打印机 330 7.12 其他 332 实例239 两种信息发送方式 332 实例240 功能快捷键 336 第8章 注册表 339 8.1 操作注册表 340 实例241 怎样存取注册表信息 340 实例242 注册表保存... -
工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究
2017-02-28 21:22:19鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作... -
C#编程经验技巧宝典
2008-06-01 08:59:33115 <br>0192 如何获取“我的文档”系统文件夹路径 115 <br>0193 如何获取应用程序当前执行的路径 116 <br>0194 如何获取当前操作系统的信息 116 <br>0195 如何实现基本数据类型随意转换 116... -
Oracle9i的init.ora参数中文说明
2008-11-07 20:14:11说明: 指定与 TO_CHAR 和 TO_DATE 函数一同使用的默认日期格式。该参数的默认值由 NLS_TERRITORY 确定。该参数的值可以是包含在双引号内的任何有效的日期格式掩码。例如: ''MMM/DD/YYYY''。 值范围: 任何有效的日期... -
MATLAB GUI设计学习手记(罗华飞)【电子书籍+配套程序】
2019-02-28 10:30:39问题1 单元数组占用的内存空间如何计算 86 问题2 如何生成指定格式的常矩阵、字符串 87 问题3 如何生成随机矩阵 90 问题4 如何查找或删除数据中满足条件的元素 91 问题5 如何给数组元素排序 94 问题6 如何从... -
java源码包---java 源码 大量 实例
2013-04-18 23:15:26Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥... -
C语言FAQ 常见问题列表
2010-10-28 16:41:29o 4.5 我可否用括号来强制执行我所需要的计算顺序? o 4.6 可是 && 和 || 运算符呢?我看到过类似 while((c = getchar()) != EOF && c != '\n') 的代码 …… o 4.7 我怎样才能理解复杂表达式?``序列点" 是什么?... -
C++程序设计语言(特别版)--详细书签版
2012-04-23 07:13:03本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=... -
Visual Basic开发实战1200例(第Ⅰ卷).(清华出版.孙秀梅.巩建华).part1
2016-06-14 11:19:42实例174 获取当前日期与指定日期的绝对值 实例175 使用Shell函数打开记事本 实例176 获取系统环境信息 实例177 掷骰子 实例178 倒计时程序 实例179 数字时钟 实例180 文本加密与解密 实例181 我的计算器 ... -
C++程序设计语言(特别版)--课后习题源代码
2012-04-23 07:37:34本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=... -
程序开发范例宝典>>
2012-10-24 10:41:28实例219 得到系统当前目录 306 实例220 在程序中改变当前路径 307 6.5 复制文件 307 实例221 使用FileStream复制大文件 308 实例222 复制文件时显示复制进度 310 实例223 批量复制文件 312 6.6 ... -
C++程序设计语言(特别版)--源代码
2012-04-23 07:33:51本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=... -
java源码包2
2013-04-20 11:28:17Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥... -
书 名:程序开发范例宝典>>【中卷】(分三卷上传完本书案例)
2010-04-05 21:59:37实例219 得到系统当前目录 306 实例220 在程序中改变当前路径 307 6.5 复制文件 307 实例221 使用FileStream复制大文件 308 实例222 复制文件时显示复制进度 310 实例223 批量复制文件 312 6.6 指定... -
书 名:程序开发范例宝典>>【下卷】(分三卷上传完本书案例)
2010-04-05 03:24:09实例219 得到系统当前目录 306 实例220 在程序中改变当前路径 307 6.5 复制文件 307 实例221 使用FileStream复制大文件 308 实例222 复制文件时显示复制进度 310 实例223 批量复制文件 312 6.6 指定... -
Delphi开发范例宝典目录
2014-03-07 10:24:25实例243 列出系统中的打印机 309 6.11 其他 310 实例244 两种信息发送方式 310 实例245 使用线程添加数据 312 实例246 功能快捷键 314 第7章 注册表 317 7.1 操作注册表 318 实例247 怎样存取注册表... -
java源码包3
2013-04-20 11:30:13Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...