sql - 如何获取第一个月的 00 :00:00 in datetime,?

标签 sql sql-server datetime sql-server-2008-r2

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

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/

相关文章:

mysql - SQL 子查询来计算有多少人按星期几和按楼层结账退房(SQLZoo)

sql - 从日期时间获取时间间隔

sql - 如何更新现有记录

sql - TSQL SELECT 语句中的 "As"和 "="有什么区别?

sql-server - 为什么我不能比较这些十六进制值?

java - 如何在本地时区将 java.time.Instant 格式化为字符串?

python - 无法将日期转换为所需格式

sql - 'union' 处或附近的 PostgreSQL 语法错误

java - 找不到驱动程序

javascript - 如何将当前日期和时间添加到已保存文件的名称中?