2

我写了一个查询来获取第一个月,

SELECT DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as First_Of_Month;

我确实得到了适当的输出,但我的时间戳显示了当前时间。

这是我在查询中所做的,希望我有意义。

使用datepart我计算了编号。第一天和今天之间的天数(int)(27-1 = 26)然后使用dateadd函数,我添加了“-datepart”来获取当月的第一天。

这只是更改日期,我应该查看或阅读什么以更改时间。我假设它与 19000101 有关

4

6 回答 6

5

对于 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 可以转置参数并导致可怕的估计-如此处所示。采用效率稍低的字符串方法实际上可能更安全:

SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + '01');
于 2013-08-27T20:49:08.343 回答
1
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) as First_Of_Month;
于 2013-08-27T20:44:56.083 回答
1

我认为最简单的方法是将结果转换为日期:

SELECT cast(DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as date) as First_Of_Month
于 2013-08-27T20:45:08.917 回答
1
SELECT convert(varchar(10),DATEADD(DAY, - (DATEPART(DAY,GETDATE())-1), GETDATE()),120)+' 00:00:00' as First_Of_Month;
于 2013-08-27T20:44:46.803 回答
1

只是日期

DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

所以一个月是:

DATEADD(mm, DATEDIFF(mm, 0,  GETDATE()), 0) AS FirstDatetimeOfMonthmm,
于 2013-08-27T20:44:54.537 回答
1

一种选择:

SELECT cast(
    cast(datepart(yyyy, getdate()) as varchar)
  + '-'
  + cast(datepart(mm, getdate()) as varchar) + '-01 00:00:00'
as datetime)

从年/月组件构建日期,然后在 1 日和午夜添加。

于 2013-08-27T20:49:03.743 回答