这样的存储过程如何写啊?(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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

5
求教存储过程写法。(SQL SERVER)
8
sql server数据库查询语句的问题
3
SQL server 2008 使用sa登录后却无法附加数据库,怎么解决?
2
求myexclipse+tomcat+sql server数据库连接的详细配置
13
查询数据库有没有某一个日期的值,sql怎么写效率高?
3
提取Acessce数据库的表保存到SQL Server数据库的表中
4
python3中如何在多线程中操作sql server数据库
4
sqlserver查询数据库权限的sql语句
9
一个myeclipse项目如何将使用mysql数据库改用sqlserver数据库
3
SQL 如何通过SQL语句获得某个用户名下绑定的数据库的名称和其拥有的角色?(第三问)
5
sql server 如何解决excel导入数据库时主键冲突的问题,sql命令怎么写
1
关于sqlserver数据库sa用户登陆失败的坑
2
sqlserver如何查询所有数据库中包含某段字符串的存储过程名,结果展示为数据库名字-存储过程名
5
SQL数据库语句获取a表的全部id并相加,要怎么写,求助大神
1
安装SQL Server2017时安装到数据库引擎、SQL客户端连接、SQL客户端连接SDK报错
4
eclipse连接SQL Server 2017 企业版数据库失败?
5
传入数据类型是List<String> 数据库的字段类型应该是什么 SQL server
3
一条SQL语句的优化,SQL Server数据库
1
Sql Server中关于CDC(数据更改捕获)的问题:sys.sp_MScdc_capture_job中找不到相应依赖存储过程与函数
2
springboot2.0.5在已经有一个sqlserver数据源的情况的添加一个mysql数据库