快下班了紧急求助

Kingofcode 2011-11-11 05:28:01
这样的 我一个存储过程 有三组日期参数 日期1起止 日期2起止 日期3起止

现在我查询的时候遇到个问题 如果我哪一组日期为空 就不管他 不为空就把它作为筛选条件 不知道怎么写 求助

例如 Select * from A

如果日期1 起2011-10-01 止 2011-11-11

日期2 为空

日期3 为2011-11-01 止为2011-11-11

则查询为

Select * from A where 日期1>='2011-10-01' and 日期1<='2011-11-11' and 日期3>='2011-11-01' and 日期3<='2011-11-11

'
...全文
64 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Kingofcode 2011-11-11
谢谢 各位的回复都可以实现 结贴
回复
邹夫子 2011-11-11
刚刚重装系统,还没有安装数据库,代码是我直接打的,不知道有没有问题,楼主可以参考一下

create procedure ProName
@begindate1 datetime,
@enddate1 datetime,
@begindate2 datetime,
@enddate2 datetime,
@begindate3 datetime,
@enddate3 datetime
as
Select * from A
where 日期1>=isnull(@begindate1,日期1)
and 日期1<=isnull(@enddate1,日期1)
and 日期1>=isnull(@begindate2,日期1)
and 日期1<=isnull(@enddate2,日期1)
and 日期1>=isnull(@begindate3,日期1)
and 日期1<=isnull(@enddate3,日期1)


回复
AcHerat 元老 2011-11-11
三个参数怎么弄的,中间有分隔符么?确定只有存在起止日期都会有?


select *
from tb
where date1 between (case when @d1 is not null then convert(datetime,substring(@d1,1,charindex(',',@d1)-1)) else date1 end)
and (case when @d1 is not null then convert(datetime,substring(@d1,charindex(',',@d1)+1,len(@d1)-charindex(',',@d1))) else date1 end)
and date2 between (case when @d2 is not null then convert(datetime,substring(@d2,1,charindex(',',@d2)-1)) else date1 end)
and (case when @d2 is not null then convert(datetime,substring(@d2,charindex(',',@d2)+1,len(@d2)-charindex(',',@d2))) else date1 end)
and date3 between (case when @d3 is not null then convert(datetime,substring(@d3,1,charindex(',',@d3)-1)) else date1 end)
and (case when @d3 is not null then convert(datetime,substring(@d3,charindex(',',@d3)+1,len(@d3)-charindex(',',@d3))) else date1 end)

回复
CREATE PROC PR_TEST
@SD1 DATETIME = NULL
,@ED1 DATETIME = NULL
,@SD2 DATETIME = NULL
,@ED2 DATETIME = NULL
,@SD3 DATETIME = NULL
,@ED3 DATETIME = NULL
AS

DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'Select * from A where 1= 1'
IF @SD1 IS NOT NULL AND @ED1 IS NOT NULL
SET @SQL =@SQL + ' AND 日期1>=''' + CONVERT(VARCHAR(10,@SD1,120) + '''
and 日期1<=''' + CONVERT(VARCHAR(10,@ED1,120) + ''' '

IF @SD2 IS NOT NULL AND @ED2 IS NOT NULL
SET @SQL =@SQL + ' AND 日期2>=''' + CONVERT(VARCHAR(10,@SD2,120) + '''
and 日期2<=''' + CONVERT(VARCHAR(10,@ED2,120) + ''' '

IF @SD3 IS NOT NULL AND @ED3 IS NOT NULL
SET @SQL =@SQL + ' AND 日期3>=''' + CONVERT(VARCHAR(10,@SD3,120) + '''
and 日期3<=''' + CONVERT(VARCHAR(10,@ED3,120) + ''' '

EXEC(@SQL)

GO
回复
写个存储过程拼凑你需要的与局部就可以了

CREATE PROC PR_TEST
@SD1 DATETIME = NULL
,@ED1 DATETIME = NULL
,@SD2 DATETIME = NULL
,@ED2 DATETIME = NULL
,@SD3 DATETIME = NULL
,@ED3 DATETIME = NULL
AS

DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'Select * from A where 1= 1'
IF @SD1 IS NOT NULL AND @ED1 IS NOT NULL
SET @SQL =@SQL + ' AND 日期1>=''' + CONVERT(VARCHAR(10,@SD1,120) + '''
and 日期1<=''' + CONVERT(VARCHAR(10,@ED1,120) + '''

IF @SD2 IS NOT NULL AND @ED2 IS NOT NULL
SET @SQL =@SQL + ' AND 日期2>=''' + CONVERT(VARCHAR(10,@SD2,120) + '''
and 日期2<=''' + CONVERT(VARCHAR(10,@ED2,120) + '''

IF @SD3 IS NOT NULL AND @ED3 IS NOT NULL
SET @SQL =@SQL + ' AND 日期3>=''' + CONVERT(VARCHAR(10,@SD3,120) + '''
and 日期3<=''' + CONVERT(VARCHAR(10,@ED3,120) + '''

EXEC(@SQL)

GO

未测试
回复
Kingofcode 2011-11-11
大家都下班了吗
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2011-11-11 05:28
社区公告
暂无公告