SQL中将用户的出生年月转换成对应的年龄
2016-06-02 09:57
417 查看
摘要: 出生年月转换成对应的年龄
今天有处理一个根据民警的出生年月信息来推算出他的年龄的需求,目前我的所有SQL操作都是在PGSQL中执行的,至于SQL是否适用其他的数据库无法进行保证,但思路基本上时这样处理,希望大家可以尝试或在我文章中评论。
首先第一种思路是利用民警的出生日期和当前的时间进行相减,得出所有的时间,此时的时间表示是天数,然后除以365,得到年份和月份等信息,由于我在处理SQL时候没有将这种SQL代码保留,就只说思路吧,大家可以尝试。
下面说说第二种思路,首先将民警的出生日期转换成年月日的形式,此时用到的函数是to_char,将时间格式化成字符串的形式,下一步是用to_timestamp将字符串转化成时间格式,然后使用age函数时,如果是默认的和当前系统时间进行比较,可以不用添加now()函数,用age函数可以将计算出对应的年月日,此时我们只是关注年份,所以要用到EXTRACT函数来截取结果中的年份信息,最后将得到的结果重命名,就可以得到我们想要的结果了。
具体的SQL语句如下
SELECT t1.policenum,t1.realname,CASE WHEN t1.sex=1 THEN '男' ELSE '女' END sex,to_char(t1.birthday,'yyyy-MM-dd') birthday,EXTRACT(YEAR FROM age(to_timestamp(to_char(t1.birthday,'yyyy-MM-dd'),'yyyy-MM-dd'))) age,t2.departmentname FROM users t1 LEFT JOIN department t2 ON t1.departmentid=t2.departmentid WHERE t1.policenum='民警编号'
上面的SQL中age字段就是我要实现的将出生日期转换成年龄的功能。
由于是在PGSQL中执行的,大家可以根据我提供的思路,尝试着在不同的数据库中去实现获取用户的年龄信息。也希望看到这篇文章,认为有更好的处理办法的程序猿们,跟我交流下。
今天有处理一个根据民警的出生年月信息来推算出他的年龄的需求,目前我的所有SQL操作都是在PGSQL中执行的,至于SQL是否适用其他的数据库无法进行保证,但思路基本上时这样处理,希望大家可以尝试或在我文章中评论。
首先第一种思路是利用民警的出生日期和当前的时间进行相减,得出所有的时间,此时的时间表示是天数,然后除以365,得到年份和月份等信息,由于我在处理SQL时候没有将这种SQL代码保留,就只说思路吧,大家可以尝试。
下面说说第二种思路,首先将民警的出生日期转换成年月日的形式,此时用到的函数是to_char,将时间格式化成字符串的形式,下一步是用to_timestamp将字符串转化成时间格式,然后使用age函数时,如果是默认的和当前系统时间进行比较,可以不用添加now()函数,用age函数可以将计算出对应的年月日,此时我们只是关注年份,所以要用到EXTRACT函数来截取结果中的年份信息,最后将得到的结果重命名,就可以得到我们想要的结果了。
具体的SQL语句如下
SELECT t1.policenum,t1.realname,CASE WHEN t1.sex=1 THEN '男' ELSE '女' END sex,to_char(t1.birthday,'yyyy-MM-dd') birthday,EXTRACT(YEAR FROM age(to_timestamp(to_char(t1.birthday,'yyyy-MM-dd'),'yyyy-MM-dd'))) age,t2.departmentname FROM users t1 LEFT JOIN department t2 ON t1.departmentid=t2.departmentid WHERE t1.policenum='民警编号'
上面的SQL中age字段就是我要实现的将出生日期转换成年龄的功能。
由于是在PGSQL中执行的,大家可以根据我提供的思路,尝试着在不同的数据库中去实现获取用户的年龄信息。也希望看到这篇文章,认为有更好的处理办法的程序猿们,跟我交流下。
相关文章推荐
- Mysql的varchar排序按照数字顺序
- mysql 常用命令大全
- mongodb常见问题
- 【数据表间关联关系】 一对多、多对一、一对一、多对多
- 【Redis源码剖析】 - Redis持久化之RDB
- 事务四大特征
- 数据库事务隔离级别实例探讨
- Sqlite事务理解
- 大话架构师之NOSQL和缓存
- MySQL数据库性能优化之存储引擎选择
- SQL Server 2016新特性:DROP IF EXISTS
- SQL Server 2016新特性:动态数据屏蔽(Dynamic Data Masking)
- SQL基本操作
- MySQL 数据库性能优化之缓存参数优化
- oracle学习(六)--时间日期函数
- 触发器学习笔记(:new,:old用法)
- oracle 正则表达式
- SQL Server 2016新特性:行级别安全控制(Row-Level Security----RLS)
- iOS App项目中引入SQLite数据库的教程
- mysql 全文检索 百万条记录的快速检索