不使用参数的 DB2 查询函数
DB2 Query Functions Not Working With Parameters
我有一个无法在 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 搜索告诉我在使用参数之前先对参数进行 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
具有以下值:
- 参数 1 --> 埃奇伍德大道 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
上面的查询returns一条有效记录。
我的问题是,如何获得分数并包含函数以处理传入的参数而不是使用硬编码字符串?
正如@Mustaccio 在评论中指出的那样,转换为 CHAR
等同于 CHAR(1)
。我更正了这个以声明实际长度并且查询正在运行。
我有一个无法在 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 搜索告诉我在使用参数之前先对参数进行 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
具有以下值:
- 参数 1 --> 埃奇伍德大道 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
上面的查询returns一条有效记录。
我的问题是,如何获得分数并包含函数以处理传入的参数而不是使用硬编码字符串?
正如@Mustaccio 在评论中指出的那样,转换为 CHAR
等同于 CHAR(1)
。我更正了这个以声明实际长度并且查询正在运行。