我如何获得特定日期的最后可能时间

时间:2008-10-03 15:06:27

标签: sql-server date time

我正在努力实现某一天的最后可能时间,例如2008-01-23 00:00:00.000的日期我需要2008-01-23 23:59:59.999或许可以使用dateadd函数在日期字段?

4 个答案:

答案 0 :(得分:22)

答案是SELECT DATEADD(ms, -3, '2008-01-24'),解释如下。

来自Marc's blog

  

但是等等,Marc ......你说你喜欢使用BETWEEN,但是那个查询没有...那是因为BETWEEN is inclusive,这意味着它包括终点。如果我订的是下个月第一天午夜到期的订单,那么它将被包括在内。那么如何在期末获得适当的价值呢?通过使用日期部分来组装一个,肯定是 NOT (但是你必须记住,最长时间是23:59:59.997 ......不要忘记毫秒)。为了做到这一点,我们使用Microsoft SQL Server DATETIME最多 3毫秒分辨率(不会发生变化)的乱码知识。所以我们所做的就是从上面给出的任何一个句末期公式中减去3毫秒。例如,昨天(当地时间)的最后一个可能时刻是:

    SELECT DATEADD(ms, -3, DATEADD(dd, DATEDIFF(dd, 0, GetDate()), 0))
     

因此,要将本月到期的订单作为BETWEEN查询,您可以使用:

    SELECT [ID]
    FROM [dbo].[Orders]
    WHERE [ShipDue] BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GetUTCDate()), 0)
    AND DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GetUTCDate()) + 1, 0))
     

请记住,始终确保您对输入参数, NOT 列进行数学运算,否则您将终止查询的SARG能力,这意味着可能已使用的索引不是

答案 1 :(得分:14)

SELECT DATEADD(ms, -2, DATEADD(dd, 1, DATEDIFF(dd, 0, GetDate())))

我认为你最初有c#..我会留下这个,万一其他人偶然发现了这个。

DateTime now = DateTime.Now;
DateTime endofDay = now.Date.AddDays(1).AddMilliseconds(-1);

您可以将“now”变量替换为您想要弄清楚的任何一天

答案 2 :(得分:8)

毫秒添加到下一个日的 start (DateAdd甚至支持纳秒,如果你想要真正好的话)。

但很可能你只是想在比较中使用这个值,在这种情况下它甚至更简单。

而不是像这样:

AND @CompareDate <= [LastTimeforThatday]

或者这个:

@compareDate BETWEEN [StartDate] AND [LastTimeforThatday]

这样做:

AND @CompareDate < [BeginningOfNextDay]

或者这个:

AND (@CompareDate >= [StartDate] AND @CompareDate < [BeginningOfNextDay])

答案 3 :(得分:3)

为什么回到它?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="map">
    <input type="button" data-name="show" value="expand" id="expand" />
    <div id="inside"></div>
    <div id="btn"></div>
</div>