2016-11-09 8 views
3

開始日終了日月単位の名前ですか?月の番号ではなく、日付ではありません。月の番号ではなく月の名前で開始日と終了日を取得します。

たとえば、今月の最初の日になります。入力は、私がそれがしたいような文字列ではなく、日付の型です。私が欲しいもの

SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) 

は「月」ではない3及び取得2016年3月1日と2016年3月31日のような文字列で入力された月の名前にあります。私は本当に圧倒され、すべての助けを感謝します。

答えて

3

あなたは月の番号を取得するにはCTEを作成することができます。

DECLARE @month VARCHAR(10) = 'March'; 

WITH CteMonths(n, m) AS(
    SELECT 1, 'January' UNION ALL 
    SELECT 2, 'February' UNION ALL 
    SELECT 3, 'March' UNION ALL 
    SELECT 4, 'April' UNION ALL 
    SELECT 5, 'May' UNION ALL 
    SELECT 6, 'June' UNION ALL 
    SELECT 7, 'July' UNION ALL 
    SELECT 8, 'August' UNION ALL 
    SELECT 9, 'September' UNION ALL 
    SELECT 10, 'October' UNION ALL 
    SELECT 11, 'November' UNION ALL 
    SELECT 12, 'December' 
) 
SELECT 
    DATEADD(MONTH, n - 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)), 
    DATEADD(DAY, -1, DATEADD(MONTH, n, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))) 
FROM CteMonths 
WHERE m = @month 
+0

おかげで、魔法のように動作します。 UDFが使用されているようないくつかの表の列でCTEを使用できますか? – fasih

+0

それに応じて、関数に入れることができます。パフォーマンスにはiTVFを使用してください。 –

+0

ありがとう。私はそれを少し試してみるとあなたに戻ってきます。 – fasih

関連する問題