0

我正在尝试创建一个实用程序存储过程,它可以接受一个参数并查询一个方便的表以检索一些快速信息。为此,我需要在参数传递之前和之后添加 '%' 字符,以便在查询中使用它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

你能帮我解决这里出了什么问题吗?

4

2 回答 2

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 个空格。

于 2013-08-26T11:11:52.333 回答
0

看来,我找到了正确的答案。正是这种用法char导致了这种行为,因为它的大小是固定的。varchar不是这样,因此连接按预期工作。

使用char,我们需要添加trim以便连接按预期发生

declare @str char(100)
select @str ='abc'
select ('%'+ltrim(rtrim(@str))+'%')

输出

%abc%
于 2013-08-27T12:36:24.317 回答