关于SQL搜索的问题

zqn454654 2011-08-30 07:30:31
select * from vipshuru where riqi between '' and '' and kahao like '%%' order by riqi desc,shijian desc

这句语句查不出来数据,怎么在不输入riqi的同时能查到kahao啊?如果2个都不输入的话显示所有
...全文
231 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqn454654 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 qianjin036a 的回复:]
SQL code
if object_id('p_cx') is not null
drop proc p_cx
go
create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
dec……
[/Quote]
太感谢了!!终于出来了!!
感谢大家的帮忙!!
-晴天 2011-08-30
  • 打赏
  • 举报
回复
if object_id('p_cx') is not null
drop proc p_cx
go
create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
declare @str varchar(max)
set @str='select * from vipshuru where where 1=1'
if isnull(@start,'')<>''
begin
set @str=@str+' and riqi between '''+ltrim(@start)+''' and '''+ltrim(@end)+''''
end
if ISNULL(@kahao,'')<>''
begin
set @str=@str+'and kahao like ''%'+@kahao+'%'''
end
set @str=@str+' order by riqi desc,shijian desc'
exec(@str)
end
go
exec p_cx '2011-08-29','2011-08-29',''
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
运行exec p_cx '2011-08-29','2011-08-29','' 的时候报错“在将 nvarchar 值 '2011-08-22' 转换成数据类型 int 时失败。”这是啥意思啊.....就差这了
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 fredrickhu 的回复:]
SQL code
if object_id('p_cx') in not null
drop proc p_cx
go
create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
dec……
[/Quote]
NOT附近有语法错误...
--小F-- 2011-08-30
  • 打赏
  • 举报
回复
if object_id('p_cx') in not null
drop proc p_cx
go
create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
declare @str varchar(max)
set @str='select * from vipshuru where where 1=1'
if isnull(@start,'')<>''
begin
set @str=@str+' and riqi between '+ltrim(@start)+' and '+ltrim(@end)+''
end
if ISNULL(@kahao,'')<>''
begin
set @str=@str+'and kahao like ''%'+@kahao+'%'''
end
set @str=@str+'order by riqi desc,shijian desc'
print(@str)
end

--调用
exec p_cx '','',''---riqi的起始范围,riqi的最后范围,kahao的值
--小F-- 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zqn454654 的回复:]
引用 15 楼 q465897859 的回复:
引用 14 楼 zqn454654 的回复:
select * from vipshuru where (riqi like '%' or riqi between '' and '') and kahao like '%%' order by riqi desc,shijian desc

这个语句怎么让无内容的时候用riqi like '……
[/Quote]

在前面加上
if object_id('p_cx') in not null
drop proc p_cx
go

-晴天 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zqn454654 的回复:]
select * from vipshuru where (riqi like '%' or riqi between '' and '') and kahao like '%%' order by riqi desc,shijian desc

这个语句怎么让无内容的时候用riqi like '%',有内容的时候用riqi between '' and ''呢?
我觉得这样应该能出来我想要……
[/Quote]

如果你用的是存储过程,可以考虑对两个日期定义默认值,默认值分别为 '1900-01-01' 和 '9999-12-31'
那样你在传输时不对这个日期赋值,就是默认值了,查询时就只要 riqi between @dt1 and @dt2 了.
如果没法使用默认值,也可以加判断:
if @dt1='' set @dt1='1900-01-01'
if @dt2='' set @dt2='9999-12-31'
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
在将 nvarchar 值 '2011-08-22' 转换成数据类型 int 时失败。

这个错误是在运行exec p_cx '2011-08-29','2011-08-29','' 的时候报的
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
在将 nvarchar 值 '2011-08-22' 转换成数据类型 int 时失败。
现在报这个错误了,怎么还有类型转换啊?
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 q465897859 的回复:]
引用 14 楼 zqn454654 的回复:
select * from vipshuru where (riqi like '%' or riqi between '' and '') and kahao like '%%' order by riqi desc,shijian desc

这个语句怎么让无内容的时候用riqi like '%',有内容的时候用riqi between ''……
[/Quote]

exec p_cx '','',''是出来全部结果了,但是输入内容的时候怎么报错呢?
这个错误内容:'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。
q465897859 2011-08-30
  • 打赏
  • 举报
回复

create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
declare @str varchar(max)
set @str='select * from vipshuru where where 1=1'
if isnull(@start,'')<>''
begin
set @str=@str+' and riqi between '+@start+' and '+@end+''
end
if ISNULL(@kahao,'')<>''
begin
set @str=@str+'and kahao like ''%'+@kahao+'%'''
end
set @str=@str+'order by riqi desc,shijian desc'
print(@str)
end

--调用
exec p_cx '','',''---riqi的起始范围,riqi的最后范围,kahao的值


q465897859 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zqn454654 的回复:]
select * from vipshuru where (riqi like '%' or riqi between '' and '') and kahao like '%%' order by riqi desc,shijian desc

这个语句怎么让无内容的时候用riqi like '%',有内容的时候用riqi between '' and ''呢?
我觉得这样应该能出来我想要……
[/Quote]
这个要用动态语句拼接 用if判断 没有值就为空 ,有的就拼接,你按我给的那个存储过程,用不同参数调用下
print出来的语句 运行下就懂 了
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
select * from vipshuru where (riqi like '%' or riqi between '' and '') and kahao like '%%' order by riqi desc,shijian desc

这个语句怎么让无内容的时候用riqi like '%',有内容的时候用riqi between '' and ''呢?
我觉得这样应该能出来我想要的结果...
q465897859 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zqn454654 的回复:]
引用 7 楼 q465897859 的回复:
要用动态语句拼接

SQL code

create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
declare @str varchar(ma……
[/Quote]
把存储过程的最后一句exec(@str)该成print(@str) 调用下存储过程 把打印出来的语句 复制上来看下
这个你就看得懂了
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qianjin036a 的回复:]
引用 10 楼 zqn454654 的回复:
引用 8 楼 qianjin036a 的回复:
引用 5 楼 zqn454654 的回复:
引用 4 楼 qianjin036a 的回复:
那这样试试:

SQL code
我是在APS.NET中用这个语句,TEXTBOX不输入内容传回来的肯定是""不是NULL……


不是你传入的是NULL,而是表中该列是NULL.
[/Quote]
表中的列都有数据啊,没有NULL的列,不太明白你说的意思
-晴天 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zqn454654 的回复:]
引用 8 楼 qianjin036a 的回复:
引用 5 楼 zqn454654 的回复:
引用 4 楼 qianjin036a 的回复:
那这样试试:

SQL code
我是在APS.NET中用这个语句,TEXTBOX不输入内容传回来的肯定是""不是NULL……
[/Quote]

不是你传入的是NULL,而是表中该列是NULL.
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qianjin036a 的回复:]
引用 5 楼 zqn454654 的回复:
引用 4 楼 qianjin036a 的回复:
那这样试试:

SQL code
select * from vipshuru where (riqi='' or riqi between '' and '') and kahao like '%%' order by riqi desc,shijian desc

这种情况应该显示所有数据……
[/Quote]
我是在APS.NET中用这个语句,TEXTBOX不输入内容传回来的肯定是""不是NULL
zqn454654 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 q465897859 的回复:]
要用动态语句拼接

SQL code

create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
declare @str varchar(max)
set @str='select……
[/Quote]
这太复杂了...我水平不行看不太懂啊....
-晴天 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zqn454654 的回复:]
引用 4 楼 qianjin036a 的回复:
那这样试试:

SQL code
select * from vipshuru where (riqi='' or riqi between '' and '') and kahao like '%%' order by riqi desc,shijian desc

这种情况应该显示所有数据吧?我还是没有数据显示
[/Quote]
不一定.可能你的riqi字段空着的是NULL,而不是''
这样:
如果传来的参数为@dt1,@dt2:
select * from vipshuru where (isnull(riqi,'')=@dt1 or riqi between @dt1 and @dt2) and kahao like '%%' order by riqi desc,shijian des
q465897859 2011-08-30
  • 打赏
  • 举报
回复
要用动态语句拼接

create proc p_cx
@start varchar(20),----riqi的起始范围
@end varchar(20), ----riqi的最后范围
@kahao varchar(20)------kahao的值
as
begin
declare @str varchar(max)
set @str='select * from vipshuru where where 1=1'
if isnull(@start,'')<>''
begin
set @str=@str+' and riqi between '+@start+' and '+@end+''
end
if ISNULL(@kahao,'')<>''
begin
set @str=@str+'and kahao like ''%'+@kahao+'%'''
end
set @str=@str+'order by riqi desc,shijian desc'
exec(@str)
end

--调用
exec p_cx '','',''---不加条件(查看全部)
加载更多回复(6)

34,590

社区成员

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

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