多条件查询的时候,日期范围如何写

edwardliu 2009-07-22 07:19:02
ALTER PROCEDURE dbo.QueryRoll
(
@材质 nvarchar(20)='',
@是否可用 nvarchar(8)='',
@入厂日期1 datetime='',
@入厂日期2 datetime='',
@总轧制量1 float='',
@总轧制量2 float='',
)
AS
DECLARE @SQLStr nvarchar(400)=''
SET @SQLStr ='WHERE 1=1'
IF(@材质!='')
SET @SQLStr=@SQLStr+'AND 材质='+@材质
IF(@是否可用!='')
SET @SQLStr=@SQLStr+'AND 是否可用='+@是否可用
IF(@入厂日期1!='')
SET @SQLStr=@SQLStr+' AND 入厂日期 BETWEEN '+convert(nvarchar,@入厂日期1,111)+' AND '+convert (nvarchar,@入厂日期2,111)
IF(@总轧制量1!='')
SET @SQLStr=@SQLStr+' AND 总轧制量 BETWEEN cast('+cast(@总轧制量1 as nvarchar)+' as float) AND cast('+cast(@总轧制量2 as nvarchar)+' as float)'
EXEC('SELECT 轧辊编号,材质,重量,适用品种,适用区域,是否精开,生产厂家,硬度,总轧制量,类别,当前辊径,是否可用 FROM BasicInfo '+@SQLStr)
RETURN

这是一个多条件搜索,各个条件都可以输入或者不输入
其中别的部分都已经调试成功,但是入厂日期这一块,就是搞不定
请大家帮忙,最好能直接写出代码给我尝试。谢谢各位了
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
edwardliu 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hhh871030 的回复:]
SQL codeALTERPROCEDURE QueryRoll
(@材质nvarchar(20)=null,@是否可用nvarchar(8)=null,@入厂日期1datetime=null,@入厂日期2datetime=null,@总轧制量1float=null,@总轧制量2float=null
)ASDECLARE@SQLStrnvarchar(400)SET@SQLStr='select¡­
[/Quote]
授人以鱼,授人以渔,谢谢啦。
hhh871030 2009-07-22
  • 打赏
  • 举报
回复


ALTER PROCEDURE QueryRoll
(
@材质 nvarchar(20)=null,
@是否可用 nvarchar(8)=null,
@入厂日期1 datetime=null,
@入厂日期2 datetime=null,
@总轧制量1 float=null,
@总轧制量2 float=null
)
AS
DECLARE @SQLStr nvarchar(400)

SET @SQLStr ='select 轧辊编号,材质,重量,适用品种,适用区域,是否精开,生产厂家,硬度,总轧制量,类别,当前辊径,是否可用 from dbo.BasicInfo where 1=1'
IF(@材质 is not null)
SET @SQLStr= @SQLStr+' AND 材质='''+@材质 +''''
IF(@是否可用 is not null)
SET @SQLStr=@SQLStr+' AND 是否可用='''+@是否可用 +''''
IF(@入厂日期1 is not null)
SET @SQLStr=@SQLStr+' AND 入厂日期1 BETWEEN '''+convert(nvarchar(20),@入厂日期1,111)+''''+' AND '''+convert(nvarchar(20),@入厂日期2,111)++''''
IF(@总轧制量1 is not null)
SET @SQLStr=@SQLStr+' AND 总轧制量 BETWEEN cast('+cast(@总轧制量1 as nvarchar)+' as float) AND cast('+cast(@总轧制量2 as nvarchar)+' as float)'
EXEC(@SQLStr)
RETURN

这边其就是加引号的问题。。。你在加引号时可以把它当成是在c#里面写这一些东西。。。那样你应该就会明白这个引号怎么加了。还有你要会利用好vs工具,在里面可以单步执行存储过程(vs 2005可以,2003不知道可不可以),你可以去网上搜一下,怎么单步调试存储过程
edwardliu 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hrb2008 的回复:]
BETWEEN '''+convert(nvarchar,@入厂日期1,111)+'''
[/Quote]
IF(@入厂日期1!='')
SET @SQLStr=@SQLStr+' AND 入厂日期 BETWEEN '''+convert(nvarchar,@入厂日期1,111)+''' AND '''+convert(nvarchar,@入厂日期2,111)+''
我改成这样了,
出现错误
字符串 '2009/07/22' 后的引号不完整。
'2009/07/22' 附近有语法错误。
这个日期是我输入的日期。
devilidea 2009-07-22
  • 打赏
  • 举报
回复
关注
hrb2008 2009-07-22
  • 打赏
  • 举报
回复
BETWEEN '''+convert(nvarchar,@入厂日期1,111)+'''
feixianxxx 2009-07-22
  • 打赏
  • 举报
回复
什么问题

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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