sybase - 简单连接

时间:2013-08-26 07:41:29

标签: string-concatenation sybase-ase

我正在尝试创建一个实用程序存储过程,它可以获取一个参数并查询一个方便的表来检索一些快速信息。为此,我需要在传递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

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

2 个答案:

答案 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%