33
SELECT *
  FROM Header
 WHERE (userID LIKE [%'%])
4

9 回答 9

72

将它们加倍以逃脱;

SELECT *
  FROM Header
 WHERE userID LIKE '%''%'
于 2011-06-28T15:45:14.883 回答
13
SELECT     *
FROM Header WHERE (userID LIKE '%''%')
于 2011-06-28T15:42:56.473 回答
7
SELECT *   FROM Header  WHERE userID LIKE '%' + CHAR(39) + '%' 
于 2011-06-28T15:48:03.950 回答
2
SELECT * FROM TableName WHERE CHARINDEX('''',ColumnName) > 0 

当您有包含大量 nvarchar 数据和数百万条记录的列时,使用百分比符号的一般“LIKE”类型的搜索会降低 SQL 操作的性能。

而 CHARINDEX 内置的 TSQL 函数更快,不会有任何性能损失。

参考SO帖子以获得比较视图​​。

于 2020-05-12T16:11:16.780 回答
1

那是:

SELECT * FROM Header 
WHERE (userID LIKE '%''%')
于 2011-06-28T15:46:44.883 回答
1
select * from Header where userID like '%''%'

希望这可以帮助。

于 2011-06-28T15:47:00.670 回答
1

首先,我的搜索查询值来自用户的输入。我已经尝试了这个问题的所有答案以及谷歌给我的所有结果,90% 的答案说 put '%''%'而另外 10% 说更复杂的答案。

由于某种原因,所有这些都不适合我。

我怎么记得在 MySQL (phpmyadmin) 中有这个内置的搜索功能所以我尝试它只是为了看看 MySQL 如何处理带有撇号的搜索,结果 MySQL 只是用反斜杠转义撇号LIKE '%\'%' 所以为什么我只用一个替换撇号\'在每个用户的查询中。

这就是我想出的:

if(!empty($user_search)) {
        $r_user_search = str_ireplace("'","\'","$user_search");
        $find_it = "SELECT * FROM table WHERE column LIKE '%$r_user_search%'";
        $results = $pdo->prepare($find_it);
        $results->execute();

这解决了我的问题。 如果这仍然存在安全问题,请纠正我。

于 2020-02-28T17:01:19.790 回答
0

括号用于标识符周围,因此您的代码将%'%Header表中查找该字段。您想使用字符串代替。要将撇号放在字符串文字中,请使用双撇号。

SELECT *
FROM Header WHERE userID LIKE '%''%'
于 2011-06-28T15:46:17.653 回答
0

通过 Java 代码比较 DB 中包含撇号的名称

String sql="select lastname  from employee where FirstName like '%"+firstName.trim().toLowerCase().replaceAll("'", "''")+"%'"

statement = conn.createStatement();
        rs=statement.executeQuery(Sql);

迭代结果。

于 2015-11-18T12:33:19.147 回答