按月份名称获取开始和结束日期,而不是月份编号

时间:2016-11-09 01:42:16

标签: sql-server

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

例如,这会让我获得当月的第一天。输入是一种日期类型,而不是我想要的字符串。

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

我想要的是在字符串中输入月份名称,例如' March'不是3并获得2016/03/01和2016/03/31。我真的很不知所措,感谢任何/所有的帮助。

1 个答案:

答案 0 :(得分: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