我想逃跑 _
在我的应用程序中使用 ESCAPE
关键字
如果用户输入: A_1
我补充说 $
在下划线之前,最后的查询如下:
SELECT APPLICATION AS "APPLICATION"
FROM ALARM
WHERE (((APPLICATION LIKE 'A$_1' ESCAPE '$')))
在我的例子中,用户可以输入任何内容,如果用户输入 $
在原始字符串中?
我用的是 LIKE
关键字,因为我正在使用通配符%,如果用户键入 *
我在服务器上把它翻译成 %
把它当作外卡,除此之外我不想用外卡。
如果用户键入字符串 _
我必须和你一起搜索 _
(无通配符)与相同 %
例如,如果我调用了应用程序 A$
在我的数据库和用户键入 $
,查询将为:
SELECT APPLICATION AS "APPLICATION"
FROM ALARM
WHERE (((APPLICATION LIKE 'A$' ESCAPE '$')))
它会以价值为基础吗 A$
在这种情况下?在我的查询中,转义符可以是值中任何位置的任何字符,而不一定是在结尾。
如何在同一个查询中处理mysql和oracle的这种情况?谢谢
4条答案
按热度按时间ca1c2owp1#
最简单的解决方案是(使用动态sql)测试用户输入并生成两个不同的查询
1) 用于输入
*
(即应列出所有申请)这和
APPLICATION LIKE '%'
(你可以把它where
子句是不可为空的列。2) 对于其他输入,即仅应选择完全匹配的应用程序
=
而不是like
```WHERE APPLICATION = '{user input}'
where APPLICATION LIKE 'A$$$_$%' ESCAPE '$'
A$_%
a0x5cqrl2#
在这种情况下,它的价值是美元吗?
在这种情况下,最简单的方法是自己检查:
rextester演示
和甲骨文:
rhfm7lfc3#
我不想用通配符查询数据库,通配符在我的应用程序中无效
如果应用程序中的通配符无效,请不要使用like运算符。你只需要转义下划线,因为你有一个喜欢和下划线是一个通配符。使用相等运算,问题就会消失。
这些where子句是等价的:
dxpyg8gm4#