在SQL Server中如何搜索带有撇号的姓名?

34
SELECT *
  FROM Header
 WHERE (userID LIKE [%'%])
9个回答

73

双倍它们以逃脱;

SELECT *
  FROM Header
 WHERE userID LIKE '%''%'

1
如果值存储在变量中怎么办? - abh

13
SELECT     *
FROM Header WHERE (userID LIKE '%''%')

1
@TalhaIrfan 没有解释双倍转义。 - Josiah Yoder

7
SELECT *   FROM Header  WHERE userID LIKE '%' + CHAR(39) + '%' 

3
SELECT * FROM TableName WHERE CHARINDEX('''',ColumnName) > 0 

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

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

参考SO文章以进行比较。


1

那是:

SELECT * FROM Header 
WHERE (userID LIKE '%''%')

1
select * from Header where userID like '%''%'

希望这可以帮到你。

1
首先,我的搜索查询值来自用户输入。我尝试了所有答案以及谷歌给我的结果,90%的答案说要放置'%''%',另外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();

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

0

标识符周围使用括号,因此您的代码将在Header表中查找字段%'%。您想要使用字符串而不是标识符。要在字符串文字中放置撇号,您可以使用双撇号。

SELECT *
FROM Header WHERE userID LIKE '%''%'

0

通过Java代码比较包含撇号的数据库名称

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

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

迭代结果。


请尝试解释给OP理解 - WoodChopper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接