这样的存储过程如何写啊?(SQL SERVER数据库)

首先:输入2个时间参数 开始时间 结束时间(ps:只能选择年月)
其次:查询9月到十月的数据,不是9月1日到10月31日的
给大家解释下:这里我要查9月的数据,其实是8月15到9月14的数据
就是不按照正常的自然月来走,我们这边统计都是按照上个月15到这个月14来算一个月的。然后要在查询的基础上-1,因为每个月都有自然增长的一人(这里的每月是指上个月15到这个月14)

这边贴一个表的语句,就按照输入的月份来查询相应的数据

CREATE TABLE [dbo].t_date NOT NULL,
[name] nvarchar NOT NULL,
[入职时间] nvarchar NOT NULL,
) ON [PRIMARY]

不清楚的可私聊

3个回答

CREATE TABLE [dbo].t_date (
[name] nvarchar(10) NOT NULL,
[入职时间] Datetime NOT NULL,
) ON [PRIMARY]
GO

insert into t_date ( name , 入职时间 ) values ('a1','2016-4-10')
insert into t_date ( name , 入职时间 ) values ('a2','2016-4-11')
insert into t_date ( name , 入职时间 ) values ('a3','2016-4-12')
insert into t_date ( name , 入职时间 ) values ('a4','2016-4-13')
insert into t_date ( name , 入职时间 ) values ('a5','2016-4-14')
insert into t_date ( name , 入职时间 ) values ('a6','2016-4-15')
insert into t_date ( name , 入职时间 ) values ('a7','2016-4-16')
insert into t_date ( name , 入职时间 ) values ('a8','2016-4-17')
insert into t_date ( name , 入职时间 ) values ('a9','2016-4-18')
insert into t_date ( name , 入职时间 ) values ('a10','2016-4-19')
insert into t_date ( name , 入职时间 ) values ('a11','2016-4-20')
insert into t_date ( name , 入职时间 ) values ('a12','2016-4-21')
insert into t_date ( name , 入职时间 ) values ('a13','2016-4-22')
insert into t_date ( name , 入职时间 ) values ('a14','2016-4-23')
insert into t_date ( name , 入职时间 ) values ('a15','2016-4-24')
insert into t_date ( name , 入职时间 ) values ('a16','2016-5-10')
insert into t_date ( name , 入职时间 ) values ('a17','2016-5-11')
insert into t_date ( name , 入职时间 ) values ('a18','2016-5-12')
insert into t_date ( name , 入职时间 ) values ('a19','2016-5-13')
insert into t_date ( name , 入职时间 ) values ('a20','2016-5-14')
insert into t_date ( name , 入职时间 ) values ('a21','2016-5-15')
insert into t_date ( name , 入职时间 ) values ('a22','2016-5-16')
insert into t_date ( name , 入职时间 ) values ('a23','2016-5-17')
insert into t_date ( name , 入职时间 ) values ('a24','2016-5-18')
insert into t_date ( name , 入职时间 ) values ('a25','2016-5-19')
insert into t_date ( name , 入职时间 ) values ('a26','2016-5-20')
insert into t_date ( name , 入职时间 ) values ('a27','2016-5-21')
insert into t_date ( name , 入职时间 ) values ('a28','2016-5-22')
insert into t_date ( name , 入职时间 ) values ('a29','2016-5-23')
insert into t_date ( name , 入职时间 ) values ('a30','2016-5-24')
insert into t_date ( name , 入职时间 ) values ('a31','2016-6-10')
insert into t_date ( name , 入职时间 ) values ('a32','2016-6-11')
insert into t_date ( name , 入职时间 ) values ('a33','2016-6-12')
insert into t_date ( name , 入职时间 ) values ('a34','2016-6-13')
insert into t_date ( name , 入职时间 ) values ('a35','2016-6-14')
insert into t_date ( name , 入职时间 ) values ('a36','2016-6-15')
insert into t_date ( name , 入职时间 ) values ('a37','2016-6-16')
insert into t_date ( name , 入职时间 ) values ('a38','2016-6-17')
insert into t_date ( name , 入职时间 ) values ('a39','2016-6-18')
insert into t_date ( name , 入职时间 ) values ('a40','2016-6-19')
insert into t_date ( name , 入职时间 ) values ('a41','2016-6-20')
insert into t_date ( name , 入职时间 ) values ('a42','2016-6-21')
insert into t_date ( name , 入职时间 ) values ('a43','2016-6-22')
insert into t_date ( name , 入职时间 ) values ('a44','2016-6-23')
insert into t_date ( name , 入职时间 ) values ('a45','2016-6-24')

GO

Create Proc DateBetweens @s nvarchar(7),@e nvarchar(7)
AS
BEGIN

Select 入职时间 ,
YEAR( case when DAY(入职时间)<15 THEN DateAdd(M,-1,入职时间) else 入职时间 end ) * 100 + MONTH ( case when DAY(入职时间)<15 THEN DateAdd(M,-1,入职时间) else 入职时间 end ) as 月份,
name from T_Date
Where 入职时间 >= DATEADD(M,-1,@s + '-15') AND 入职时间 < @e + '-14'

END
GO
DateBetweens '2016-05','2016-10'

结果

你的代碼創建數據表就有問題,現在假如你創建的數據表 表明 aa,下面的存儲過程可以實現你的要求:
CREATE PROCEDURE GetPersonIN
@date1 AS date, --參數1
@date2 AS date --參數2
AS
BEGIN
DECLARE @d1 DATE
DECLARE @d2 DATE
DECLARE @count AS int
SET @d1=CONVERT(datetime,Convert(nvarchar,YEAR(@date1))+'-'+Convert(nvarchar,MONTH(@date1) )+'-'+Convert(nvarchar,15))
SET @d2=CONVERT(datetime,Convert(nvarchar,YEAR(@date1))+'-'+Convert(nvarchar,MONTH(@date1) )+'-'+Convert(nvarchar,15))

SET @count= (SELECT COUNT(*) FROM aa WHERE [入职时间]>=@d1 AND [入职时间]<=@d2)
SET @count=@count-1
RETURN @count

end

qq_39372401
qq_39372401 能不能写上注释啊,我是小白
2 年多之前 回复

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE affairsInfo_Select
@timeStart varchar(50),@timeEnd varchar(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM [dbo].[t_date] where [入职时间] >= convert(datetime,left(@timeStart,8) + '15') and [INMoment]< CONVERT(datetime,left(@timeEnd,8) + '14')
END
GO

u010848611
xity 打开你的目标数据库或者use 它,新建一个查询执行就可以
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问