DB2查询函数不使用参数

时间:2017-02-22 17:27:41

标签: 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]参数标记的使用无效。

这不是一个大问题。谷歌搜索告诉我在使用它们之前先将参数CAST。那么我将查询更改为:

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 EDGEWOOD BLVD
  • param2 - > 19 EDGEWOOD BLVD
  • param3 - > %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

上述查询返回有效记录。

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

1 个答案:

答案 0 :(得分:0)

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