读书人

根据生日查询多少个月?解决方案

发布时间: 2012-06-15 19:37:05 作者: rapoo

根据生日查询多少个月?

SQL code
--当前时间是假如是 6月6日1  select datediff(Month,'2012-06-1 00:00:00.000',getdate()) --这个查询就是02  select datediff(Month,'2012-05-16 00:00:00.000',getdate()) --这个查询等于1

1 不到一个月是0 好理解
2 也不到一个月,为什么是1?
难道用的函数不对?
我要的结果 根据生日和当前时间查询多少个月。 如果满一个月 就是1 不满一个月 就是0。
满一个月,不满两个月 显示2
满2个月,不满三个月 显示3
.....
....
...以此类推

该如何查询 谢谢高手回答

[解决办法]
你那个是函数把日期的月份取出来做差的,不考虑天数。你想考虑的话就
SQL code
1  select datediff(dd,'2012-06-1 00:00:00.000',getdate()) --这个查询就是02  select datediff(dd,'2012-05-16 00:00:00.000',getdate()) --这个查询等于1
[解决办法]
SQL code
declare @dt datetimeset @dt='2012-05-16 00:00:00.000'select   case     when day(@dt)>day(getdate())      then datediff(Month,@dt,getdate())-1    else datediff(Month,@dt,getdate())  end
[解决办法]
SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')BEGIN    DROP TABLE tbaENDGOCREATE TABLE tba(    ID INT,    Date VARCHAR(10))GOINSERT INTO tbaSELECT 1,'2012-05-12' UNIONSELECT 1,'2012-06-11' UNIONSELECT 1,'2012-04-15' UNIONSELECT 1,'2012-03-18' UNIONSELECT 1,'2012-05-19' SELECT DATE,CASE WHEN DATEADD(MONTH,DATEDIFF(MONTH,Date,GETDATE()),Date) <= GETDATE() THEN DATEDIFF(MONTH,Date,GETDATE())                 ELSE DATEDIFF(MONTH,Date,GETDATE()) - 1 END AS '月份'         FROM tbaDATE    月份2012-03-18    22012-04-15    12012-05-12    12012-05-19    02012-06-11    0
[解决办法]
探讨
满一个月 就是1 不满一个月 就是0。
满一个月,不满两个月 显示2
满2个月,不满三个月 显示3

[解决办法]
SQL code
declare    @date1 datetime,    @date2 datetimeselect    @date1 = '2012-02-29',    @date2 = '2012-03-28'select     datediff(month, @date1, @date2) +      (case when day(@date2) > day(@date1) then 1 else 0 end) -    --满一个月,不满两个月 显示2    (case when datediff(month, @date1, @date2) = 1 and day(@date2) < day(@date1) then 1 else 0 end)  --如果满一个月 就是1 不满一个月 就是0
[解决办法]
DATEDIFF(MONTH,日期1,日期2)是按月份的差,即'2012-6-1'与'2012-6-6'是同一月份,差是0 ,而'2012-5-16'差是1.楼主所说的满一个月是什么概念,30天称一个月吗? 满一个月是1,满一个月不满2个月是二,这个怎么界定?概念搞清楚,就不难了,可以按天算!

读书人网 >SQL Server

热点推荐