Sql 如何在datetime中获得月初的00:00:00?
我写了一个查询以获得月初Sql 如何在datetime中获得月初的00:00:00?,sql,sql-server,datetime,sql-server-2008-r2,Sql,Sql Server,Datetime,Sql Server 2008 R2,我写了一个查询以获得月初 SELECT DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as First_Of_Month; 我确实得到了相应的输出,但我的时间戳显示了当前时间 以下是我在查询中所做的,希望有意义 使用dateparti计算了从第一天到今天的天数(int)(27-1=26) 然后,使用dateadd函数,我添加了“-datepart”以获取月份的第一个 这只是更改日期,为了更改时间,我应该看什么或读什么。我假设它与19
SELECT DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as First_Of_Month;
我确实得到了相应的输出,但我的时间戳显示了当前时间
以下是我在查询中所做的,希望有意义
使用datepart
i计算了从第一天到今天的天数(int)(27-1=26)
然后,使用dateadd
函数,我添加了“-datepart”以获取月份的第一个
这只是更改日期,为了更改时间,我应该看什么或读什么。我假设它与19000101有关,只是日期
SELECT convert(varchar(10),DATEADD(DAY, - (DATEPART(DAY,GETDATE())-1), GETDATE()),120)+' 00:00:00' as First_Of_Month;
DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
因此,一个月内:
DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) AS FirstDatetimeOfMonthmm,
我认为最简单的方法是迄今为止的结果:
SELECT cast(DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as date) as First_Of_Month
一个备选方案:
SELECT cast(
cast(datepart(yyyy, getdate()) as varchar)
+ '-'
+ cast(datepart(mm, getdate()) as varchar) + '-01 00:00:00'
as datetime)
根据年/月组件建立日期,然后在1号和午夜进行调整。对于SQL Server 2012(感谢adrift和i-one) 适用于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
的表达式时要小心。实际上,采用效率稍低的字符串方法可能更安全:
SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + '01');
感谢Mark以正确的方式对其进行编辑。:)什么版本的SQL Server?还有,你会用这个做什么?@AaronBertrand:我用的是SS-2008R2Great,请总是用一个版本提问,这样人们就不用猜了。答案可能很重要。@AaronBertrand:你的另一个有用的建议。我是新来论坛的,所以请原谅我的愚蠢错误。这取决于它的使用方式。它给了我今天的日期和时间戳00:00:00,谢谢你。:)现在我需要寻找一种方法来做到这一点,这样我才能得到月1号。请不要提倡使用速记。您可能已经记住了M是月份,但是您是否曾经惊讶于,比如,
selectdatepart(Y,GETDATE())
或选择DATEPART(W,GETDATE())代码>?输入MONTH
不需要花很多力气,而且它可以让您的代码自行编制文档。+1,只是为了好玩DATEADD(DAY,1,EOMONTH(GETDATE(),-1))
2012+?@adrift好的,我会添加它,不过我承认我不是这个函数的超级粉丝BOMONTH()
会有用得多。让我检查一下我是否正确,1)月初转换为120的格式代码,2)为什么是+'00:00'?这只是为了增加“空间00:00:00”吗?
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0);
SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + '01');