Sql Server 中 "LIKE" 的使用问题! 请点击指教!!(200分)

  • 主题发起人 主题发起人 张丽敏
  • 开始时间 开始时间

张丽敏

Unregistered / Unconfirmed
GUEST, unregistred user!
USE pubs
GO
CREATE PROCEDURE find_books2 @au_lname varchar(20) AS

if @au_lname <> ' '
set @au_lname = @au_lname + '%'
else
set @au_lname = '%' --查找所有记录(不限制au_lame)

SELECT t.title_id, t.title
FROM authors a, titleauthor ta, titles t
WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
AND a.au_lname LIKE @au_lname + '%'
GO


EXEC find_books2 'ring'

下面是结果集:

title_id title
-------- ---------------------------------------------------------------
MC3021 The Gourmet Microwave
PS2091 Is Anger the Enemy?
PS2091 Is Anger the Enemy?
PS2106 Life Without Fear

(4 row(s) affected)


我要查找 (a.au_lname 符合所有条件的记录, 不限制a.au_lname):

EXEC find_books2 ' '
这样当a.au_lname 等于''或null的记录出不来.
~~~~~~~~~~~~~~~~~~~~
有什么办法达到目的??
谢谢!!



 
CREATE PROCEDURE find_books2 @au_lname varchar(400) AS
begin

declare @sql varchar(1000);

if @au_lname <> ' '
set @au_lname = '(a.au_lname like "'+@au_lname + '%")'
else
set @au_lname = '(a.au_lname like "%" or a.au_lname="" or a.au_lname is null)' --查找所有记录(不限制au_lame)

set @sql='SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND '+@au_lname;
exec(@sql);
end;

 
CREATE PROCEDURE find_books2 @au_lname varchar(20) AS

if @au_lname <> ' '
begin
set @au_lname = @au_lname + '%';
SELECT t.title_id, t.title
FROM authors a, titleauthor ta, titles t
WHERE a.au_lname LIKE @au_lname
AND a.au_id = ta.au_id AND ta.title_id = t.title_id;
end
else
SELECT t.title_id, t.title
FROM authors a, titleauthor ta, titles t
WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id;
 
我不是很明白你的意思,但如果你的意思是:
如果 @au_lname=空格 就让等于''或null的记录不出来的话:
CREATE PROCEDURE find_books2 @au_lname varchar(20) AS
if @au_lname <> ' '
set @au_lname = @au_lname + '%'
else
set @au_lname = '%' --查找所有记录(不限制au_lame)

SELECT t.title_id, t.title
FROM authors a, titleauthor ta, titles t
WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
AND a.au_lname LIKE @au_lname and a.au_lname<>""
and a.au_lname is not null




 
WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
AND a.au_lname LIKE @au_lname + '%'
最后的+"%"是不是该去掉?你前面不是赋值了吗?
 
agree mataijin
 
我在DELPHI中是这样使用的:
后面模糊:
query1.sql.text:='select * from tablename where 资产类别名称 like ' + '''' + edit1.Text + '%'''
前面模糊:
query1.sql.text:='select * from tablename where 资产类别名称 like ' + '''%' + edit1.Text + ''''
模糊:
query1.sql.text:='select * from tablename where 资产类别名称 like ' + '''%' + edit1.Text + '%'''

 
djdsz的方法可以做到,但如果这个Select语句很复杂时就很麻烦了.
有没有更好的办法? 谢谢!!
 
在复杂也是拼接字符串呀。请问麻烦在哪里?
另外,采用inner join 的方式,结构可以更清晰。
而且可以得到更好的效率。
 
SELECT 语句中有十几个变量, 其中日期型变量,提示"类型不匹配"错误,将日期型转为
字符型也不行.
 
能不能把sql语句贴出来,我帮你调试
 
不看看我的
 
是呀。我的呢
 
多人接受答案了。
 
后退
顶部