我正在努力实现某一天的最后可能时间,例如2008-01-23 00:00:00.000的日期我需要2008-01-23 23:59:59.999或许可以使用dateadd函数在日期字段?
答案 0 :(得分:22)
答案是SELECT DATEADD(ms, -3, '2008-01-24')
,解释如下。
来自Marc's blog:
但是等等,Marc ......你说你喜欢使用
BETWEEN
,但是那个查询没有...那是因为BETWEEN
is inclusive,这意味着它包括终点。如果我订的是下个月第一天午夜到期的订单,那么它将被包括在内。那么如何在期末获得适当的价值呢?通过使用日期部分来组装一个,肯定是 NOT (但是你必须记住,最长时间是23:59:59.997 ......不要忘记毫秒)。为了做到这一点,我们使用Microsoft SQL ServerDATETIME
列最多 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>