SQL语句计算距离今天生日还差几天
2011-01-26 09:19
423 查看
SQL语句计算距离生日还差几天原理很简单,将要比较的2个日期的年份统一成一样的,然后再使用datediff函数计算记录的数据和当前的日期比较得到相距的天数。
将年份统一成一样的时候需要注意瑞年的问题,需要将当前的时间的年份统一成记录的,而不是将记录的年份统一成当前日期的年份。要不当前为平年,当记录为瑞年并且为2月29号时间转换就出错了。具体示例看下面的示例
要实现年份统一可以使用字符串操作函数substring,或者时间操作函数datepart。
下面为SQL语句计算距离生日还差几天的具体代码,测试数据量大概为2w条左右。addtime为记录时间的【如同生日一样】。
--第一种方法,substring函数操作,将记录年份统一为当前的,当当前为平年碰到记录为瑞年的2月29号会出错,除非当前年丰也为瑞年,这个语句有错误,不推荐
declare @d datetime
set @d=getdate()
select addtime,datediff(dd,getdate(),convert(char(4),getdate(),120)+'-'+substring(convert(char(10),addtime,120),6,5))as days,id from information order by id
print datediff(ms,@d,getdate())
--第一种方法,substring函数操作,更正后,年份要和生日的一直才行。要不碰到瑞年的记录会出错 耗时大概350ms左右
declare @d datetime
set @d=getdate()
select addtime,datediff(dd,convert(char(4),addtime,120)+'-'+substring(convert(char(10),getdate(),120),6,5),addtime)as days
from information
print datediff(ms,@d,getdate())
--第二种方法,datepart函数操作,耗时大概150ms左右
declare @d datetime
set @d=getdate()
select addtime,datediff(dd
,cast(datepart(yyyy,addtime) as char(4))+'-'+cast(datepart(mm,getdate()) as char(4))+'-'+cast(datepart(dd,getdate()) as char(4))
,addtime)as days
from information
print datediff(ms,@d,getdate())
综合上面的,得出第二种sql语句计算距离生日还要几天效率比较快~,虽然语句是长了一点。
来源:http://www.coding123.net/article/20110125/sql-compute-birthdate-now-days.aspx
将年份统一成一样的时候需要注意瑞年的问题,需要将当前的时间的年份统一成记录的,而不是将记录的年份统一成当前日期的年份。要不当前为平年,当记录为瑞年并且为2月29号时间转换就出错了。具体示例看下面的示例
要实现年份统一可以使用字符串操作函数substring,或者时间操作函数datepart。
下面为SQL语句计算距离生日还差几天的具体代码,测试数据量大概为2w条左右。addtime为记录时间的【如同生日一样】。
--第一种方法,substring函数操作,将记录年份统一为当前的,当当前为平年碰到记录为瑞年的2月29号会出错,除非当前年丰也为瑞年,这个语句有错误,不推荐
declare @d datetime
set @d=getdate()
select addtime,datediff(dd,getdate(),convert(char(4),getdate(),120)+'-'+substring(convert(char(10),addtime,120),6,5))as days,id from information order by id
print datediff(ms,@d,getdate())
--第一种方法,substring函数操作,更正后,年份要和生日的一直才行。要不碰到瑞年的记录会出错 耗时大概350ms左右
declare @d datetime
set @d=getdate()
select addtime,datediff(dd,convert(char(4),addtime,120)+'-'+substring(convert(char(10),getdate(),120),6,5),addtime)as days
from information
print datediff(ms,@d,getdate())
--第二种方法,datepart函数操作,耗时大概150ms左右
declare @d datetime
set @d=getdate()
select addtime,datediff(dd
,cast(datepart(yyyy,addtime) as char(4))+'-'+cast(datepart(mm,getdate()) as char(4))+'-'+cast(datepart(dd,getdate()) as char(4))
,addtime)as days
from information
print datediff(ms,@d,getdate())
综合上面的,得出第二种sql语句计算距离生日还要几天效率比较快~,虽然语句是长了一点。
来源:http://www.coding123.net/article/20110125/sql-compute-birthdate-now-days.aspx
相关文章推荐
- mysql计算经纬度距离并排序的sql语句
- 通过经纬度计算距离,可以用来得到周边500米内的商家。mybatis中的Sql语句实现
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句
- sql 语句 根据顾客生日计算 顾客年龄
- mysql实现经纬度计算两个坐标之间的距离sql语句
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句以及伪列作为查询条件实现
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句
- SQL语句实现根据经纬度计算距离并排序分页
- SQL语句调优 - 统计信息的含义与作用及维护计算
- mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句
- mysql 中sql 语句查询今天、昨天、近7天、近30天、一个月内、上一月数据
- sql 计算两个经纬度点之间的距离
- mysql 中sql 语句查询今天、昨天、近7天、近30天、一个月内、上一月 数据
- 求救!胜负比率计算问题?如何用SQL语句实现?(存储过程也可以)
- sql 计算地球2个坐标之间的距离
- 今天在论坛上看到有朋友求一段 每个type排名前十的数据 sql语句
- 今天在写sql语句的时候,碰到了字段值是null时导致判断跟预期不通问题
- 【Java】Java根据出生日期计算还有几天的生日
- mysql 查询随机条记录的sql语句和php计算概率