我有一个列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月)的相同数据,以便最终我有一个像我的例子中的排名但对于上述每个月。
这里的任何人都可以帮我吗?
提前非常感谢,蒂姆。答案 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) + '%'