图片 5

T-SQL自定义函数返回前一天或后一天日期

在t-sql中用大量的日期操作函数,要看我们怎么去使用了,现在我们介绍了利用sql来实现返回前一天和后一天的日期并输出。

下面两个自定义函数,一个是获取指定的前一天的日期,另外一个是获取指定日期的后一天日期。开发企业内网软件常用,为了更好的的规范和代码维护,Insus.NET常会把一些重复使用的代码,重构为函数。

获取指定日期月份的第一天,你可以使用DATEADD函数,减去指定日期的月份过去了的天数,即可。
复制代码 代码如下: CREATE FUNCTION
[dbo].[udf_FirstDayOfMonth] ( @Date DATE ) RETURNS DATETIME AS
BEGIN RETURN CAST(DATEADD(day,1 – DAY(@Date), @Date) AS DATETIME) END
或者,用DATEDIFF计算指定日期与日期开始之时,相隔几个月,然后再DATEADD加上这个相隔月份数,从零开始。
复制代码 代码如下: CREATE FUNCTION
[dbo].[udf_FirstDayOfMonth] ( @Date DATE ) RETURNS DATETIME AS
BEGIN RETURN DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) END
或者,从指定的日期取出年或月,然后与01组合为日期,即得到指定日期当月天第一天。
复制代码 代码如下: CREATE FUNCTION
[dbo].[udf_FirstDayOfMonth] ( @Date DATE ) RETURNS DATETIME AS
BEGIN DECLARE @y NVARCHAR(4) = CAST(YEAR(@Date) AS NVARCHAR(4)) DECLARE
@m NVARCHAR(2) = CAST(MONTH(@Date) AS NVARCHAR(2)) RETURN CAST((@y +
N’-‘ + @m + N’-01′) AS DATETIME) END 或者,参考这篇://
使用CONVERT函数,指定日期格式来转换,这样也可以获取指定日期所在月份的第一天。
复制代码 代码如下: CREATE FUNCTION
[dbo].[udf_FirstDayOfMonth] ( @Date DATE ) RETURNS DATETIME AS
BEGIN DECLARE @ym NVARCHAR(10) = CONVERT(varchar(8),GETDATE(),23) RETURN
CAST((@ym + N’01’) AS DATETIME) END

先来看看常用的日期函数

 

日期函数:

返回前一天:

1,上个月:如上月是201201:(CONVERT([varchar](6),dateadd(month,(-1),getdate()),(112)))2,昨天:2012-02-02
CONVERT(varchar(100), GETDATE() – 1, 23)3,今天:2012-02-03
CONVERT(varchar(100), GETDATE() , 23)4,上月最后一天:2012-01-31
23:59:59.997 dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
5,当月第一天 2012-02-01 00:00:00.000 DATEADD(mm,
DATEDIFF(mm,0,getdate()), 0)

图片 1图片 2udf_Yesterday

下面我们来看T-SQL自定义函数返回前一天或后一天日期

— =============================================
— Author:        Insus.NET
— Create date:  
2012-03-22
— Description:   指定日期,返回前一天日期
— =============================================
CREATE FUNCTION [dbo].[udf_Yesterday](@datetime DATETIME)
RETURNS DATETIME
AS 
BEGIN    
    RETURN  DATEADD(DAY,-1,@datetime)
END
GO

代码如下复制代码 — =============================================–
Author: Insus.NET– Create date: 2012-03-22– Description:
指定日期,返回前一天日期–
=============================================CREATE FUNCTION
[dbo].[udf_Yesterday](@datetime DATETIME)RETURNS DATETIMEAS BEGIN
RETURN DATEADD(DAY,-1,@datetime)ENDGO

 

返回后一天:

返回后一天:

代码如下复制代码

图片 3图片 4udf_Tomorrow

— =============================================– Author: Insus.NET–
Create date: 2012-03-22– Description: 指定日期,返回后一天日期–
=============================================CREATE FUNCTION
[dbo].[udf_Tomorrow](@datetime DATETIME)RETURNS DATETIMEAS BEGIN
RETURN DATEADD(DAY,1,@datetime)ENDGO

— =============================================
— Author:        Insus.NET
— Create date:  
2012-03-22
— Description:   指定日期,返回后一天日期
— =============================================
CREATE FUNCTION [dbo].[udf_Tomorrow](@datetime DATETIME)
RETURNS DATETIME
AS 
BEGIN    
    RETURN  DATEADD(DAY,1,@datetime)
END
GO

实例

 

代码如下复制代码

Demo:

SELECT [dbo].[udf_Yesterday](CURRENT_TIMESTAMP) AS
[Yesterday]SELECT [dbo].[udf_Tomorrow](CURRENT_TIMESTAMP) AS
[Tomorrow]

SELECT [dbo].[udf_Yesterday](CURRENT_TIMESTAMP) AS [Yesterday]
SELECT [dbo].[udf_Tomorrow](CURRENT_TIMESTAMP) AS [Tomorrow]

效果

 

注:为了更好的的规范和代码维护,Insus.NET常会把一些重复使用的代码,重构为函数。

Result:

图片 5