我写了一个查询来获取第一天,
SELECT DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as First_Of_Month;
我确实得到了适当的输出,但我的时间戳显示的是当前时间。
这是我在查询中所做的,希望我说得通。
使用 datepart
我计算了编号。第一天和今天之间的天数 (int) (27-1 =26)
然后使用 dateadd
函数,我添加了“-datepart”以获得该月的第一天。
这只是更改日期,我应该查看或阅读什么才能更改时间。我假设它与 19000101 有关
最佳答案
对于 SQL Server 2012(感谢 adrift 和 i-one)
DECLARE @now DATETIME = CURRENT_TIMESTAMP;
SELECT DATEADD(DAY, 1, EOMONTH(@now, -1));
-- or
SELECT DATEFROMPARTS(YEAR(@now), MONTH(@now), 1);
对于 SQL Server 2008+
DECLARE @now DATETIME = CURRENT_TIMESTAMP;
-- This shorthand works:
SELECT CONVERT(DATE, @now+1-DAY(@now));
-- But I prefer to be more explicit, instead of relying on
-- shorthand date math (which doesn't work in all scenarios):
SELECT CONVERT(DATE, DATEADD(DAY, 1-DAY(@now), @now));
对于 SQL Server 2005
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0);
如果您正在使用此 SQL Server 2005 方法,请注意:在查询中使用涉及 DATEDIFF
的表达式时需要小心。 SQL Server can transpose the arguments and lead to horrible estimates - as seen here .采用效率稍低的字符串方法实际上可能更安全:
SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + '01');
关于sql - 如何获取第一个月的 00 :00:00 in datetime,?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18475091/