2012-04-08 199 views
0

我試圖從當前年的當前月份的第一天到當前日期獲取天數。 那麼,這個腳本有什麼問題?和正確的?如何獲取使用datediff的月份第一天的天數

select DATEDIFF(day,CONVERT(varchar,1+'/'+ MONTH(GETDATE())+'/' + YEAR(GETDATE()),102),GETDATE()); 
+3

是不是從這個月的第一天開始的天數總是等於'DAY(YourDate)'???在三月二十二日,這個數字是...... 22,不是? – 2012-04-08 09:12:52

+0

@marc_s - 我認爲它可能是'-1'(因爲發佈的代碼將在本月的第一天返回0) – 2012-04-08 09:26:46

+0

@Damien_The_Unbeliever:是的,可能 - 你是對的。 – 2012-04-08 09:33:42

回答

2

是不是從該月的第一天開始的天數總是等於DAY(YourDate)或可能是DAY(YourDate) - 1 ???

在3月22日,這個數字是..... 22(或21 - 取決於你如何計數) - 不?

那麼這個怎麼樣:

SELECT 
    DaysFromFirstOfMonth = DAY(GETDATE()) - 1 

是你在找什麼?

+0

好主意 - 你是對的,但是如何在相同的例子中使用'DateDIFF'? – Salahaldin 2012-04-08 13:06:40

+0

@Salahaldin:**爲什麼**你堅持'DATEDIFF'?這只是不必要的複雜和容易出錯..... – 2012-04-08 15:03:06

0

你的風格值似乎是錯誤的。 102是用於ANSI-日期(YY.MM.DD) - 如果你想使用英國/法語日期(日/月/年),你必須使用值103:

select DATEDIFF(day,CONVERT(varchar,1+'/'+ MONTH(GETDATE())+'/' + YEAR(GETDATE()),103),GETDATE()); 

http://www.w3schools.com/sql/func_convert.asp看到

+0

將varchar值「/」轉換爲數據類型int時轉換失敗。 – Salahaldin 2012-04-08 09:31:41

+0

對不起,我無法嘗試這一點,所以我沒有看到另一個錯誤:你應該可以轉換爲日期時間,而不是varchar。但我認爲下面的一些答案正在接近這個問題好得多 – Johanness 2012-04-08 09:44:42

1

我建議您使用DAY(作爲@marc_s在評論中說)或DATEPART,以返回一個整數,表示您正在使用的日期中的「月份的日期」部分。

例如爲:

SELECT DAY(GETDATE()),DATEPART(day,GETDATE()) 

威爾(今天,2012 4月8日)的回報:

8,8 

然後,您可以從那裏進行必要的調整。

相關問題