Sql DB2查询函数不使用参数

Sql DB2查询函数不使用参数,sql,db2,ibm-midrange,Sql,Db2,Ibm Midrange,我有一个在DB2/AS400中无法使用的查询 select integer(score(ADRLIN1, :param1)*100) as RELEVANCEADR, ADRLIN1, PSTCOD from MYSCHEMA.MYTABLE where contains(ADRLIN1, :param2) = 1 and pstcod like :param3 order by RELEVANCEADR desc 当我尝试运行上面的查询并在参数中输入值时,我发现[SQL0418]参数标

我有一个在DB2/AS400中无法使用的查询

select integer(score(ADRLIN1, :param1)*100) as RELEVANCEADR, 
ADRLIN1, PSTCOD from MYSCHEMA.MYTABLE 
where contains(ADRLIN1, :param2) = 1
and pstcod like :param3 
order by RELEVANCEADR desc
当我尝试运行上面的查询并在参数中输入值时,我发现[SQL0418]参数标记的使用无效

这不是什么大问题。谷歌搜索告诉我在使用参数之前先转换参数。因此,我将查询更改为:

select integer(score(ADRLIN1, CAST(:param1 AS CHAR))*100) as RELEVANCEADR, 
ADRLIN1, PSTCOD from MYSCHEMA.MYTABLE  
where contains(ADRLIN1, CAST(:param2 AS CHAR)) = 1
and pstcod like :param3 order by RELEVANCEADR desc
具有以下值:

  • param1-->埃奇伍德大道19号
  • param2-->埃奇伍德大道19号
  • 参数3-->%68046%
我得到一个空的结果集但是,如果我实际使用文本填充查询,则查询有效

select integer(score(ADRLIN1, '19 EDGEWOOD BLVD')*100) as RELEVANCEADR, 
ADRLIN1, PSTCOD from MYSCHEMA.MYTABLE
where contains(ADRLIN1, '19 EDGEWOOD BLVD') = 1
and pstcod like '%68046%' 
order by RELEVANCEADR desc
上面的查询返回一条有效记录


我的问题是,如何获得分数并包含处理传入参数的函数,而不是使用硬编码字符串?

正如@Mustaccio在评论中指出的,强制转换为
CHAR
相当于
CHAR(1)
。我更正了这一点,以声明实际长度,查询正在运行。

您的代码中有
param1
param2
。是否为这两个字符串传递相同的字符串?@GordonLinoff是的,即使我将
param2
替换为
param1
以确保传递相同的字符串,结果集也是空的。
CHAR
相当于
CHAR(1)
,因此所有输入值都被截断。铸造时使用实际数据类型。谢谢!成功了。我把CHAR改成CHAR(50),结果成功了!如果将
param3
定义为
CHAR
而不是
VARCHAR
的话,另一个可能会让你头疼的问题是
CHAR'变量始终是定义的长度,C在左边用空格填充。因此,如果将
%68046%`放在CHAR(10)字段中,就好像使用了
'%68046%'
一样,只会找到
pstcod
包含68046
末尾有三个空格的行。