我有以下问题:
SELECT *
FROM PRODUCTS
WHERE REDUCTION LIKE '50%'我必须使用类似的条款。此查询需要同时在Oracle和Server上运行。
现在有一个问题,因为我想匹配所有的产品,减少50%。但数据可能会减少50.50%。因为'%‘是一个特殊的字符,它匹配这两个字符。
我想转义所有的特殊字符,比如我的查询中的%,这样我只能得到50%的产品。
对于Oracle和SQL server,是否有一种统一的解决方案可以通过动态方式转义特殊字符?
使用反斜杠不是一种解决方案,因为实际上我们不知道输入是什么。
发布于 2019-01-22 12:04:05
ESCAPE子句在甲骨文和SQL Server中工作。
至于您的输入,您需要用%替换所有出现的\% (最好是在将值传递给关系数据库管理系统之前)。您也可以在查询中这样做,因为幸运的是,Oracle REPLACE和Server REPLACE函数具有类似的签名:
CREATE TABLE tests(test VARCHAR(100));
INSERT INTO tests VALUES('%WINDIR%\SYSTEM32');
SELECT *
FROM tests
WHERE test LIKE REPLACE(REPLACE('%WINDIR%\SYSTEM32', '\', '\\'), '%', '\%') ESCAPE '\'发布于 2019-01-22 10:41:03
转义子句将反斜杠()标识为转义字符。
SELECT *
FROM PRODUCTS
WHERE REDUCTION LIKE '50\%'发布于 2019-01-22 11:00:10
您需要类似上述第一个答案的内容,但不需要使用\作为转义。您可以使用ESCAPE子句任意选择。
但如果:
那你就得设法逃离他们。
也许您可以保留一些您知道用户不需要的字符,并使之成为转义字符。
据我所知,在)。在Server您还必须考虑括号中。
一个好的方面是,过度转义看起来不会导致问题,所以即使您不需要在Oracle中缩小括号,这样做也是可以的。
https://stackoverflow.com/questions/54306348
复制相似问题