DATEDIFF 返回跨两个指定日期的日期和时间边界数。 语法 DATEDIFF ( datepart , startdate , enddate ) 参数 datepart是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。日期部分 缩写 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 startdate是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。 因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。 enddate是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。返回类型 integer注释 startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。当结果超出整数值范围,DATEDIFF 产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,最大数是 68 年。计算跨分钟、秒和毫秒这些边界的方法,使得 DATEDIFF 给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的 datepart 边界数。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之间的星期数是 1。示例 此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。USE pubs GO SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days FROM titles GO
1: create view v_getdate As select getdate() as getd 2: create function tst () returns bigint As begin declare @a bigint select @a = datediff(second,'1994.1.1',getd) from v_getdate Return @a end 3: select dbo.tst()
select datediff(second,'1994-1-1',getdate()) as [second]
select datediff(second,'1994-4-1',getdate()) as [second]
测试 create view v_getdate As select getdate() as getdcreate function tst () returns bigint As begin declare @a bigint select @a = datediff(second,'1994.1.1',getd) from v_getdate Return @a end select dbo.tst(),datediff(second,'1994.1.1',getdate()) -------------------- ----------- 308499070 308499070(所影响的行数为 1 行)
create view v_getdate As select getdate() getd gocreate function getdiff(@b datetime) returns numeric(38) As begin declare @a numeric(38) select @a=datediff(s,@b,getd) from v_getdate Return @a end goselect dbo.getdiff('1994-1-1')
测试 create view v_getdate As select getdate() as getdcreate function tst (@rq datetime) returns bigint As begin declare @a bigint select @a = datediff(second,@rq,getd) from v_getdate Return @a end select dbo.tst('1994.1.1'),datediff(second,'1994.1.1',getdate()) -------------------- ----------- 308499506 308499506(所影响的行数为 1 行)
create view v_getdate As select getdate() getd gocreate function getdiff(@b datetime) returns numeric(38) As begin declare @a numeric(38) select @a=datediff(s,@b,getd) from v_getdate ------^^^^这里不是吗?? Return @a end goselect dbo.getdiff('1994-1-1')
返回跨两个指定日期的日期和时间边界数。 语法
DATEDIFF ( datepart , startdate , enddate ) 参数
datepart是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。日期部分 缩写
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
startdate是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。 因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。 enddate是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。返回类型
integer注释
startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。当结果超出整数值范围,DATEDIFF 产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,最大数是 68 年。计算跨分钟、秒和毫秒这些边界的方法,使得 DATEDIFF 给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的 datepart 边界数。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之间的星期数是 1。示例
此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO
create view v_getdate
As
select getdate() as getd
2:
create function tst ()
returns bigint
As
begin
declare @a bigint
select @a = datediff(second,'1994.1.1',getd) from v_getdate
Return @a
end
3:
select dbo.tst()
create view v_getdate
As
select getdate() as getdcreate function tst ()
returns bigint
As
begin
declare @a bigint
select @a = datediff(second,'1994.1.1',getd) from v_getdate
Return @a
end
select dbo.tst(),datediff(second,'1994.1.1',getdate())
-------------------- -----------
308499070 308499070(所影响的行数为 1 行)
As
select getdate() getd
gocreate function getdiff(@b datetime)
returns numeric(38)
As
begin
declare @a numeric(38)
select @a=datediff(s,@b,getd) from v_getdate
Return @a
end
goselect dbo.getdiff('1994-1-1')
create view v_getdate
As
select getdate() as getdcreate function tst (@rq datetime)
returns bigint
As
begin
declare @a bigint
select @a = datediff(second,@rq,getd) from v_getdate
Return @a
end
select dbo.tst('1994.1.1'),datediff(second,'1994.1.1',getdate())
-------------------- -----------
308499506 308499506(所影响的行数为 1 行)
我是的确想在函数中得到那个时间差,赋给一个 变量
是不是不创建那个view,就不能将
datediff(second,'1994.1.1',getd)的结果直接赋给变量?
As
select getdate() getd
gocreate function getdiff(@b datetime)
returns numeric(38)
As
begin
declare @a numeric(38)
select @a=datediff(s,@b,getd) from v_getdate
------^^^^这里不是吗??
Return @a
end
goselect dbo.getdiff('1994-1-1')
FORMATMESSAGE
NEWID
IDENTITY
GETANSINULL
PATINDEX
@@ROWCOUNT
GETDATE
PERMISSIONS
@@TRANCOUNT
GetUTCDate
SESSION_USER
APP_NAME
HOST_ID
STATS_DATE
CHARINDEX
HOST_NAME
SYSTEM_USER
CURRENT_TIMESTAMP
IDENT_INCR
TEXTPTR
CURRENT_USER
IDENT_SEED
TEXTVALID
DATENAME
IDENTITY
USER_NAME
以上这些函数都不能在自定义函数中使用