2014-10-22 42 views
0

如何创建一个减去两个日期的方法,这与sql server 2008中格式为datetime2(7)的实际日期相同。 例如,我创建这个方法: Delete from TblMessage Where MDateTime<((SELECT TOP (1)MDateTime FROM TblMessage ORDER BY MDateTime DESC)- ('2013-10-04 16:47:56.0000000'))如何在Sql Server 2008中以datetime2格式减去两个日期

,但它不工作。我想结果中减去两个日期是这样的:

MDateTime1:2013-10-05 16:47:56.0000000 
MDateTime2:2013-09-04 16:47:56.0000000 
Result:2013-01-01 00:00:00.0000000 

结果= MDateTime1-MDateTime2
我怎么能做到这一点。谢谢...

+0

无法在我的沙盒执行上述查询。 – 2014-10-22 11:41:40

+0

我在上面解释过。这种方法不起作用.. – 2014-10-22 11:46:02

回答

0

也许你正在寻找呢? (day,datediff(day,GETDATE(),getdate() - 10),GETDATE());

+0

谢谢你的帮助。祝你有美好的一天 – 2014-10-23 07:20:02

0

DATEDIFF(dayofyear,MDateTime1,MDateTime2) AS结果

http://msdn.microsoft.com/en-us/library/ms189794.aspx

+0

这种方法给了我很多天。我不想要它..我想得到结果作为datetime – 2014-10-22 11:51:01

+0

恐怕我根本不明白你希望看到什么作为结果。你想从另一个日期减去一个日期,并得到一个日期作为答案。因此不知何故从10月5日= 1月1日减去9月4日?这对我来说没有意义。也许一些更好的例子的一些额外的解释会在这里帮助。 – 2014-10-22 13:05:51

+0

我想通过使用datetime从数据库中删除数据。我有一个TblMessage的表名,这个表有一个名称为MDateTime的列。我需要从最后一个数据中删除上个月(30天)以外的数据,我需要使用MDatetime作为日期时间格式sql服务器.OK – 2014-10-22 13:24:38

0
DECLARE 
    @DATE1 DATETIME = '2013-10-05 16:47:56.000', 
    @DATE2 DATETIME = '2013-09-04 17:37:42.000', 
    @DATEDIFF AS INT, 
    @BASEDATE DATETIME; 

    -- USE WHAT EVER DATE YOU WISH TO BE YOUR BASE DATE 

    SET @BASEDATE = '1/1/1900'; 

    SET @DATEDIFF = DATEDIFF(SECOND, @DATE2, @DATE1); 

    SELECT @DATE1,@DATE2,@DATEDIFF, DATEADD(SECOND,@DATEDIFF,@BASEDATE) 

因此标量函数可以这样创建...

CREATE FUNCTION dbo.sf_GetMeasureDate 
    (
     @EndDate DATETIME, 
     @StartDate DATETIME, 
     @BaseDate DATETIME 
    ) 
    RETURNS DATETIME 
    AS 
    BEGIN 
     DECLARE @DATEDIFF AS INT 
     SET @DATEDIFF = DATEDIFF(SECOND, @StartDate, @EndDate); 
     Return DATEADD(SECOND,@DATEDIFF,@BASEDATE) 
    END 
    GO 

然后你经常SELECT语句中,你可以调用函数本身。

SELECT dbo.sf_GetMeasureDate('2013-10-05 16:47:56.000','2013-09-04 17:37:42.000','1/1/1900') 

或现有的查询中:

SELECT dbo.sf_GetMeasureDate([fld1],[fld2],'1/1/1900')