=波波日志 > SQL及数据库 > SQL语句计算距离今天生日还差几天=
SQL语句计算距离今天生日还差几天
SQL语句计算距离生日还差几天原理很简单,将要比较的2个日期的年份统一成一样的,然后再使用datediff函数计算记录的数据和当前的日期比较得到相距的天数。
将年份统一成一样的时候需要注意瑞年的问题,需要将当前的时间的年份统一成记录的,而不是将记录的年份统一成当前日期的年份。要不当前为平年,当记录为瑞年并且为2月29号时间转换就出错了。具体示例看下面的示例
要实现年份统一可以使用字符串操作函数substring,或者时间操作函数datepart。
下面为SQL语句计算距离生日还差几天的具体代码,测试数据量大概为2w条左右。addtime为记录时间的【如同生日一样】。
综合上面的,得出第二种sql语句计算距离生日还要几天效率比较快~,虽然语句是长了一点。
将年份统一成一样的时候需要注意瑞年的问题,需要将当前的时间的年份统一成记录的,而不是将记录的年份统一成当前日期的年份。要不当前为平年,当记录为瑞年并且为2月29号时间转换就出错了。具体示例看下面的示例
要实现年份统一可以使用字符串操作函数substring,或者时间操作函数datepart。
下面为SQL语句计算距离生日还差几天的具体代码,测试数据量大概为2w条左右。addtime为记录时间的【如同生日一样】。
+展开
-SQL
--第一种方法,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())
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())
+展开
-SQL
--第一种方法,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())
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())
+展开
-SQL
--第二种方法,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())
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语句计算距离生日还要几天效率比较快~,虽然语句是长了一点。
类别:SQL及数据库 作者:波波 日期:2011-01-25 【评论:2】
相关文章
日期:2011-6-8 13:19:02 IP:114.218.*.*
刚刚就是遇到了闰平年的问题了。过来学习一下管理员回复(2011-6-8 17:11:23)
O(∩_∩)O~
日期:2011-6-8 13:29:03 IP:114.218.*.*
发现一个问题,如果按照你写的方法,当前的2月有29日,生日那年的2月没有29日。那不还是一样的会报错么管理员回复(2011-6-8 17:13:11)
参考最下面的那个是用detepart函数
第一种方法碰到瑞年会出错。
第二种和第三种不会出错,效率第三种比较高。
发表留言
热门博文
- access数据库导入mssqlserver保留自动增长列
- mssqlserver数据库导入access保留自动增长列
- 无法连接到WMI提供程序。你没有权限或者该服务器无法访问
- 链接Access出现“找不到可安装的 ISAM”错误的问题
- asp连接mssql“出现未找到提供程序。该程序可能未正确安装”错误
- Windows7如何安装SQL Server 2000
最新博文
- Sql Server参数化优化查询
- sqldataadapter update更新dataset无法同时更新多个表
- SqlServer2000无法打开用户默认数据库。登录失败
- sqlserver2005如何转移到sqlserver2000
- 'sa'用户登录失败。原因:未与信任 SQL Server 连接相关联
- SQL Server 2005 无法连接
随机博文
- MSSQL不同服务器之间的数据操作
- 分布式缓存系统Memcached简介与实践
- MSSQLServer无法修改表 因为当前正在复制
- 高速分布式缓存系统 memcached
- SQL Server游标介绍
- alter修改表中某列为自动增长列
广告商赞助

