我有一个存储过程使用如下所示的选项,到目前为止工作正常。
在这种情况下,例如,它选择具有上个月日期的所有记录,即2014年3月(列:dateEsc,格式为nvarchar(20)
,示例日期:2014-03-25)。
我的选择(示例):
SELECT COUNT(*) AS groupCount
FROM Log_Esc
WHERE
CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), DATEADD(month, -1, GETDATE()), 112) + '01', 112)
如果不是当前日期(GETDATE()),我如何更改此项?我想使用变量日期输入作为参考。
此输入可以是任何日期,格式为nvarchar(20)
,例如:2014-04-03。
因此,我不想从GETDATE()计算上个月和当前月份,而是想从变量日期输入计算相同的月份。
非常感谢你提供任何帮助,蒂姆。
答案 0 :(得分:1)
首先,我认为这个查询比你的查询更好:
SELECT COUNT(*) AS groupCount
FROM Log_Esc
WHERE DATE >= dateadd(month,datediff(month,0,dateadd(month,GETDATE(),-1)),0)
AND DATE < dateadd(month,datediff(month,0,GETDATE()),0)
如果DATE字段中有索引,则可以进行搜索。
如果您将参数@indate定义为日期或日期时间,那么这将起作用
SELECT COUNT(*) AS groupCount
FROM Log_Esc
WHERE DATE >= dateadd(month,datediff(month,0,dateadd(month,@indate,-1)),0)
AND DATE < dateadd(month,datediff(month,0,@indate),0)
请参阅此问题,了解有关将日期汇总到一个月的更多信息:Floor a date in SQL server
答案 1 :(得分:0)
所以你想要的是一个参数:
Specifying Parameters in a Stored Procedure
参数允许您传递用户输入以修改输出。
一个例子
CREATE PROCEDURE dbo.Param1
@param int
AS
BEGIN
select 7 *@param as Value
END
EXEC dbo.Param1 5 -- 7 *5
EXEC dbo.Param1 -10 -- 7 * -10
或许这会为您提供一些有关如何实施参数以完成小组计数的创意。