快下班了紧急求助

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

'
...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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)

昵称被占用了 2011-11-11
  • 打赏
  • 举报
回复
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
昵称被占用了 2011-11-11
  • 打赏
  • 举报
回复
写个存储过程拼凑你需要的与局部就可以了

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
  • 打赏
  • 举报
回复
大家都下班了吗

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧