sql 比较得到两个时间相差的间隔

在sybase中使用的方法是:
SELECT datediff(minute, ‘2009-04-28 12:05:00’, getdate());

在网上查了一下在SQL Server中的语法:

这个函数DateAdd(month,2,WriteTime):
日期部分缩写 Year yy, yyyy quarter qq, q Month mm, m dayofyear dy, y Day dd, d Week wk, ww Hour hh minute mi, n second ss, s millisecond ms  这个表足够说明问题了吧,从year到millisecond都可以处理,够方便了吧.

DATEDIFF 函数 [日期和时间]

——————————————————————————–

功能
返回两个日期之间的间隔。

语法
DATEDIFF ( date-part, date-expression-1, date-expression-2 )

date-part :
year | quarter | month | week | day | hour | minute | second | millisecond

参数
date-part 指定要测量其间隔的日期部分。

有关日期部分的详细信息,请参见日期部分。

date-expression-1 某一间隔的起始日期。从 date-expression-2 中减去该值,返回两个参数之间 date-parts 的天数。

date-expression-2 某一间隔的结束日期。从该值中减去 Date-expression-1,返回两个参数之间 date-parts 的天数。

用法
此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 – date1)的有符号的整数值。

当结果不是日期部分的偶数倍时,DATEDIFF 将被截断而不是被舍入。

当使用 day 作为日期部分时,DATEDIFF 返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。

当使用 month 作为日期部分时,DATEDIFF 返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。

当使用 week 作为日期部分时,DATEDIFF 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。

对于更小的时间单位存在溢出值:

milliseconds 24 天

seconds 68 年

minutes 4083 年

others 没有溢出限制

如果超出这些限制,此函数将返回溢出错误。

标准和兼容性
SQL/92 Transact-SQL 扩展。

SQL/99 Transact-SQL 扩展。

Sybase 与 Adaptive Server Enterprise 兼容。

示例
下面的语句返回 1:

SELECT datediff( hour, ‘4:00AM’, ‘5:50AM’ )下面的语句返回 102:

SELECT datediff( month, ‘1987/05/02’, ‘1995/11/15′ )下面的语句返回 0:

SELECT datediff( day, ’00:00′, ’23:59’ )下面的语句返回 4:

SELECT datediff( day,
‘1999/07/19 00:00’,
‘1999/07/23 23:59’ )下面的语句返回 0:

SELECT datediff( month, ‘1999/07/19’, ‘1999/07/23’ )下面的语句返回 1:

SELECT datediff( month, ‘1999/07/19’, ‘1999/08/23′ )

select datediff(day,’2008-05-14′,’2008-05-14’)

SELECT datediff( month, ‘1999/07/19’, ‘1999/08/23’ )

if(‘1999/03/23′>’1999/07/19′)
select 0
else
select 1

个日期函数
getdate()
得到当前时间,可以设置得到各种时间格式.
datepart(日期部分,日期)
取指定时间的某一个部分,年月天时分秒.
datediff(日期部分,日期1,日期2)
计算指定的日期1和日期2的时间差多少.
dateadd(日期部分,数值表达式,日期)
计算指定时间,再加上表达式指定的时间长度.

–取时间的某一个部分

Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q  季 1 ~ 4
Month Mm m  月1 ~ 12
Day of year Dy y  一年的日数,一年中的第几日 1-366
Day Dd d  日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww  周,一年中的第几周 0 ~ 51
Hour Hh h  时0 ~ 23
Minute Mi n  分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms – 毫秒 0 ~ 999
select datepart(yy,getdate()) –year
select datepart(mm,getdate()) –month
select datepart(dd,getdate()) –day
select datepart(hh,getdate()) –hour
select datepart(mi,getdate()) –min
select datepart(ss,getdate()) –sec
–取星期几
set datefirst 1
select datepart(weekday,getdate()) –weekday
–字符串时间
select getdate() — ’03/11/12′
select convert(char,getdate(),101) — ’09/27/2003’
select convert(char,getdate(),102) — ‘2003.11.12’
select convert(char,getdate(),103) — ’27/09/2003′
select convert(char,getdate(),104) — ‘27.09.2003’
select convert(char,getdate(),105) — ’27-09-2003′
select convert(char,getdate(),106) — ’27 Sep 2003′
select convert(char,getdate(),107) –‘Sep 27, 2003′
select convert(char,getdate(),108) –’11:16:06’
select convert(char,getdate(),109) –‘Sep 27 2003 11:16:28:746AM’
select convert(char,getdate(),110) –’09-27-2003′
select convert(char,getdate(),111) –‘2003/09/27’
select convert(char,getdate(),112) –‘20030927′
select rtrim(convert(char,getdate(),102))+’ ‘+(convert(char,getdate(),108)) — ‘2003.11.12 11:03:41′
–整数时间
select convert(int,convert(char(10),getdate(),112)) — 20031112
select datepart(hh,getdate())*10000 + datepart(mi,getdate())*100 + datepart(ss,getdate()) — 110646
–时间格式 “YYYY.MM.DD HH:MI:SS” 转换为 “YYYYMMDDHHMISS”
declare @a datetime,@tmp varchar(20),@tmp1 varchar(20)
select @a=convert(datetime,’2004.08.03 12:12:12′)
select @tmp=convert(char(10),@a,112)
select @tmp
select @tmp1=convert(char(10),datepart(hh,@a)*10000 + datepart(mi,@a)*100 + datepart(ss,@a))
select @tmp1
select @tmp=@tmp+@tmp1
select @tmp

–当月最后一天
declare
@tmpstr varchar(10)
@mm int,
@premm int,
@curmmlastday varchar(10)
begin
select @mm=datepart(month,getdate())–当月
select @premm=datepart(month,dateadd(month,-1,getdate())) –上个月
if (@mm>=1 and @mm<=8)
select @tmpstr=convert(char(4),datepart(year,getdate()))+’.0’+convert(char(1),datepart(month,dateadd(month,1,getdate())))+’.’+’01’
else if (@mm>=9 and @mm<=11)
select @tmpstr=convert(char(4),datepart(year,getdate()))+’.’+convert(char(2),datepart(month,dateadd(month,1,getdate())))+’.’+’01’
else
select @tmpstr=convert(char(4),datepart(year,dateadd(year,1,getdate())))+’.0’+convert(char(1),datepart(month,dateadd(month,1,getdate())))+’.’+’01’
select @curmmlastday=convert(char(10),dateadd(day,-1,@tmpstr),102) –当月最后一天
end

Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q  季 1 ~ 4
Month Mm m  月1 ~ 12
Day of year Dy y  一年的日数,一年中的第几日 1-366
Day Dd d  日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww  周,一年中的第几周 0 ~ 51
Hour Hh h  时0 ~ 23
Minute Mi n  分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms – 毫秒 0 ~ 999