首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一个查询中转义Oracle和Server的特殊字符

在同一个查询中转义Oracle和Server的特殊字符
EN

Stack Overflow用户
提问于 2019-01-22 10:36:14
回答 3查看 1.6K关注 0票数 0

我有以下问题:

代码语言:javascript
复制
SELECT *
FROM PRODUCTS
WHERE REDUCTION LIKE '50%'

我必须使用类似的条款。此查询需要同时在Oracle和Server上运行。

现在有一个问题,因为我想匹配所有的产品,减少50%。但数据可能会减少50.50%。因为'%‘是一个特殊的字符,它匹配这两个字符。

我想转义所有的特殊字符,比如我的查询中的%,这样我只能得到50%的产品。

对于Oracle和SQL server,是否有一种统一的解决方案可以通过动态方式转义特殊字符?

使用反斜杠不是一种解决方案,因为实际上我们不知道输入是什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-22 12:04:05

ESCAPE子句在甲骨文SQL Server中工作。

至于您的输入,您需要用%替换所有出现的\% (最好是在将值传递给关系数据库管理系统之前)。您也可以在查询中这样做,因为幸运的是,Oracle REPLACE和Server REPLACE函数具有类似的签名:

代码语言:javascript
复制
CREATE TABLE tests(test VARCHAR(100));
INSERT INTO tests VALUES('%WINDIR%\SYSTEM32');
SELECT *
FROM tests
WHERE test LIKE REPLACE(REPLACE('%WINDIR%\SYSTEM32', '\', '\\'), '%', '\%') ESCAPE '\'
票数 1
EN

Stack Overflow用户

发布于 2019-01-22 10:41:03

转义子句将反斜杠()标识为转义字符。

代码语言:javascript
复制
SELECT *
FROM PRODUCTS
WHERE REDUCTION LIKE '50\%'
票数 0
EN

Stack Overflow用户

发布于 2019-01-22 11:00:10

您需要类似上述第一个答案的内容,但不需要使用\作为转义。您可以使用ESCAPE子句任意选择。

但如果:

  • 允许用户输入通配符;
  • 你需要像这样使用;
  • 你不希望他们像通配符一样被对待;

那你就得设法逃离他们。

也许您可以保留一些您知道用户不需要的字符,并使之成为转义字符。

据我所知,在)。在Server您还必须考虑括号中。

一个好的方面是,过度转义看起来不会导致问题,所以即使您不需要在Oracle中缩小括号,这样做也是可以的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54306348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档