SQL Server:获取当前月份和前几个月

时间:2014-04-01 09:19:26

标签: sql sql-server date stored-procedures group-by

我有一个列dateE的表格,其格式为nvarchar(20),并包含格式为yyyy-mm-dd的日期。 以下存储过程从2014年4月起使用dateE从此表中获取所有记录:

BEGIN
    SET NOCOUNT ON;
    SELECT      cat,
                COUNT(*) AS groupCount
    FROM        Log_PE 
    WHERE       dateE LIKE '2014-04%'
    GROUP BY    cat
    ORDER BY    groupCount desc, cat
END

如何更改此权限,以便我不必对日期进行硬编码,而是始终使用当前年份和月份?

此外,我想使用相同的存储过程来获取前三个月(在本例中为2014年1月,2月,3月)的相同数据,以便最终我有一个像我的例子中的排名但对于上述每个月。

这里的任何人都可以帮我吗?

提前非常感谢,蒂姆。

2 个答案:

答案 0 :(得分:2)

不是比较字符串,而是比较日期。试试这个:

SELECT      cat, COUNT(*) AS groupCount
FROM        Log_PE 
WHERE       CONVERT(DATE, dateE, 120) >= 
              CONVERT(DATE, CONVERT(VARCHAR(6), GETDATE(), 112) + '01', 112)

GROUP BY    cat
ORDER BY    groupCount desc, cat

说明:

--Convert your string date column to a date type (yyyy-mm-dd --> 120)
CONVERT(DATE, dateE, 120)

--Convert the current date to yyyymmdd format (style 112) 
--and get the first 6 characters. ie; Year and month
CONVERT(VARCHAR(6), GETDATE(), 112) 

--Add `'01'` to the `yyyymm` and convert back to a date type
CONVERT(DATE, CONVERT(VARCHAR(6), GETDATE(), 112) + '01', 112) 

答案 1 :(得分:2)

尝试使用此日期表达式:

...where dateE LIKE convert(varchar (7), GETDATE(), 20) + '%'