我正在尝试创建一个实用程序存储过程,它可以获取一个参数并查询一个方便的表来检索一些快速信息。为此,我需要在传递param之前和之后添加'%'字符,以便在like
的查询中使用它,如下所示。
工作代码 - 如果是硬编码的
select some_field from TABLE where nm_field like ('%'+'abc'+'%')
但是当我尝试对变量使用相同的内容时,与上面的查询
相比,我得到的结果更少declare @nm char(100)
select @nm = 'abc'
select some_field from TABLE where nm_field like ('%'+@abc+'%')
在某些调查,反复试验中,以下选项显示'%'仅在参数之前添加,而不是在两侧。
declare @name char(20), @other char(20)
select @name = 'abc'
select @other = ('%' + @name + '%')
select @other
预期产出
%ABC%
但实际输出
%ABC
我正在使用Sybase ASE-12.5.4
你能帮我解决这里出了什么问题吗?
答案 0 :(得分:0)
尝试将@nm
类型更改为varchar,如下所示
declare @nm varchar(100)
select @nm = 'abc'
select some_field from TABLE where nm_field like ('%'+@abc+'%')
Char
类型具有常量大小,db使用空格填充空白
declare @nm char(100)
select @nm = 'abc'
下面选择
select @nm
将返回abc和97个空格。
答案 1 :(得分:0)
看来,我找到了正确的答案。它导致此行为的char
的使用,因为它具有固定的大小。 varchar
并非如此,因此连接按预期工作。
使用char
,我们需要添加trim
,以便连接按预期发生
declare @str char(100)
select @str ='abc'
select ('%'+ltrim(rtrim(@str))+'%')
输出
%abc%