Oracle包含带有特殊字符的语句

sauutmhj  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(217)

我想使用oracle contains语句搜索字符串“A&G BROS,INC.”

FROM contact
WHERE CONTAINS 
(name, 'A&G BROS, INC.') > 0

但是我没有得到准确的结果,我得到了超过300,000条记录,基本上所有包含INC的记录。我尝试使用

FROM contact
WHERE CONTAINS 
(name, 'A&' || 'G BROS, INC.') > 0

我仍然得到同样的大量结果任何想法如何运行这个查询与这个特殊字符我想缩小结果,这样我就可以至少得到结果,开始与“A&G”注意“喜欢”和“INSTR”不能使用。

ulydmbyx

ulydmbyx1#

处理特殊字符的另一种方法是使用函数CHR(n),其中n是特殊字符的ASCII值。对于&,它是38,因此可以使用'A'代替'A&G BROS,INC.'||人权委员会(38)||'G BROS,INC'。直接在文字中使用这些特殊字符可能会比较棘手,因为它们在不同的环境中会有不同的行为。您可以使用ASCII函数来查找字符的ASCII值,如下所示:
从双字符中选择ASCII('&');

ASCII码('&')

38
juzqafwq

juzqafwq2#

&是AND运算符,但,也是ACCUM运算符。这些运算符的行为解释了您所看到的内容。
您需要对这些字符进行转义:
查询在查询表达式(如and & or)中具有特殊含义的单词或符号|accum,您必须转义它们。有两种方法可以转义查询表达式中的字符...
因此,您可以执行以下操作:

FROM contact
WHERE CONTAINS 
(name, 'A\&G BROS\, INC.') > 0

FROM contact
WHERE CONTAINS 
(name, 'A{&}G BROS{,} INC.') > 0

FROM contact
WHERE CONTAINS 
(name, '{A&G BROS, INC.}') > 0

如果您无法阻止客户端提示替换变量(这实际上是contains转义的一个独立问题),那么您可以将此方法与原始方法结合起来:

FROM contact
WHERE CONTAINS 
(name, '{A&' || 'G BROS, INC.}') > 0

相关问题