2012-04-08 16 views
0

現在の今月の1日から現在の日付までの日数を取得しようとしています。 このスクリプトで何が問題になっていますか?そして正しいものは?日付を使用して月の最初の日から日数を取得する方法

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

月の第1日からの日数は、常に「DAY(YourDate)」と同じではありませんか? 3月22日、その数は..... 22、いいえ??? –

+0

@marc_s - それから '-1'かもしれないと思います(投稿コードは最初の月に0を返すので) –

+0

@Damien_The_Unbeliever:はい、おそらく - あなたが正しいです。 –

答えて

2
を見ます

月の初日からの日数は、常にDAY(YourDate)またはおそらくDAY(YourDate) - 1に等しくなりませんか?

3月22日に、その番号は..... 22(または21 - あなたのカウント方法によって異なります) - いいえ???

それでは、どのようにこのことについて:

SELECT 
    DaysFromFirstOfMonth = DAY(GETDATE()) - 1 

は、あなたが探しているものということです?

+0

あなたは正しいですが、同じサンプルで 'DateDIFF'を使う方法は? – Salahaldin

+0

@Salahaldin:**なぜあなたは 'DATEDIFF'を主張しますか?これは単に不必要に複雑でエラーが発生しやすい..... –

0

あなたのスタイルの価値は間違っているようです。 102は、ANSI-日付(YY.MM.DD)のためである - あなたはフランス語/英国の日付(DD/MM/YY)を使用したい場合は、値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

+0

申し訳ありません私はこれを試すことができませんでしたので、私は他の間違いを見ませんでした:あなたはおそらく日時に変換する必要があります、varcharに変換する必要があります。しかし、私は以下の答えのいくつかは、問題にもっと良く近づいていると思います。 – Johanness

1

(@marc_sがコメントで言うように)、またはDATEPARTのいずれかを使用して、作業している日付の「月の日」部分を表す整数を返すことをお勧めします。

例えば:

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

ウィル(今日、2012年4月8日)リターン:

8,8 

あなたはそこから必要な調整を行うことができます。

関連する問題