2016-11-09 74 views
3

我该如何获得开始日期结束日期的月份名称?不是按日期,而是按月份编号。按月份名称获取开始日期和结束日期,而不是月份编号

例如,这会让我获得本月的第一天。输入是一个日期类型,不像我想要的那样是字符串。

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

我想要的是输入月份名称字符串像'3月'不是3,并得到2016/03/01和2016/03/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

谢谢,工程就像一个魅力。我可以在某些表格列中使用CTE,如使用UDF吗? – fasih

+0

取决于,你可以把它放在一个函数中。使用iTVF获得性能。 –

+0

谢谢一堆。我会稍后尝试一下并回复你。 – fasih

相关问题