我试图实现某一天的最后一个可能的时间,例如在2008-01-23 00:00:00.000的日期,我需要2008-01-23 23:59:59.999,也许使用日期字段的dateadd函数?
发布于 2018-07-18 12:34:15
答案是SELECT DATEADD(ms, -3, '2008-01-24')
,解释如下。
来自Marc的博客:
但是等等,Marc ......你说你喜欢使用
BETWEEN
,但是那个查询没有...那是因为BETWEEN
是包容性的,这意味着它包含了终点。如果我订的是下个月第一天午夜到期的订单,那么它将包括在内。那么如何在期末获得适当的价值呢?这肯定不是通过使用日期部分来组装一个(但是你必须记住它是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))
请记住,始终确保你做数学题对输入参数,不列,或者你会杀了特区政府的查询,这意味着可能已被使用没有索引的-Ability。
发布于 2018-07-18 13:33:08
SELECT DATEADD(ms, -2, DATEADD(dd, 1, DATEDIFF(dd, 0, GetDate())))
我以为你一开始有.。我会把这个留在这里以防其他人碰到这个。
DateTime now = DateTime.Now;
DateTime endofDay = now.Date.AddDays(1).AddMilliseconds(-1);
你可以用你想找出的任何一天替换“现在”变量。
https://stackoverflow.com/questions/-100000387
复制相似问题