我有一个我无法在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]使用参数标记无效的使用。
这不是一个大问题。Google搜索告诉我在使用参数之前要施放参数。因此,我将查询更改为:
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
上面的查询返回有效记录。
我的问题是,如何获得分数并包含与参数传递的功能,而不是使用硬编码字符串?
正如@mustaccio在评论中指出的那样,铸造为 CHAR
是 CHAR(1)
等效的。我更正了以声明实际的长度,并且查询正在工作。