2010-09-21 163 views
2

我有一个日期参数(@rptMonth),用户从日期选择日历中选择。日期必须是该月的第一天。无论用户选择什么,我都想将其转换为mm/01/yyyy。例如,我需要每月的第一天。因此,如果用户选择2010年6月22日,我需要将其转换为06/01/2010。所以在我的查询中,它会像WHERE YEAR_MONTH = DATEADD(“m”,datediff(“m”,“1900-01-01”,@ RptMonth),“1900-01-01”),“mm/dd/yyyy“,但是当我尝试这个时,我在','附近得到了不正确的语法。不知道这是否会起作用。同一个月的第一天

回答

5

更新:

select dateadd(month, datediff(month, 0, getdate()), 0) 

老年人:

试试这个:

declare @arbitraryDate datetime; 
set @arbitraryDate = getdate(); 
set @arbitraryDate = dateadd(dd, datediff(dd, 0, @arbitraryDate), 0) --strip time 
select dateadd(dd, -day(@arbitraryDate)+1,@arbitraryDate) --strip days 

或者这样:

select cast(convert(varchar(6), getdate(), 112) + '01' as datetime) 
3

这也应该工作:

SELECT CAST(CAST(YEAR(@pInputDate) AS VARCHAR(4)) + 
      CAST(MONTH(@pInputDate) AS VARCHAR(2)) + '01' AS DATETIME) 
+0

我相信'2010/12/12'是文化依赖。虽然'20101212'不是。我不知道为什么我知道这一点。 – 2010-09-21 20:59:43

+1

**更新**。 'set dateformat ydm;选择演员('2010/24/12'作为日期时间)'你走了!歧义。但不管'dateformat'设置如何,这个查询'select cast('20101224'as datetime)'会工作得很好。 – 2010-09-21 21:05:57

+0

您的查询还允许轻松前往一个月。很有用!肯定+1。 – 2010-09-21 21:07:48