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

时间:2011-06-28 15:42:03

标签: sql sql-server apostrophe

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

9 个答案:

答案 0 :(得分:55)

加倍他们逃脱;

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

答案 1 :(得分:10)

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

答案 2 :(得分:7)

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

答案 3 :(得分:2)

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

当具有大量nvarchar数据和数百万条记录的列时,使用百分号的常规“ LIKE”搜索将降低SQL操作的性能。

虽然CHARINDEX内置的TSQL函数要快得多,并且不会造成任何性能损失。

参考SO帖子以提供比较视图。

答案 4 :(得分:1)

这是:

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

答案 5 :(得分:1)

首先,我的搜索查询值来自用户的输入。 我已经尝试过所有关于此问题的答案,以及Google给我的所有结果,其中90%的答案表示'%''%',而其他10%的答案较为复杂。 / p>

由于某些原因,这些都不对我有用。

我还记得在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();

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

答案 6 :(得分:0)

括号围绕标识符使用,因此您的代码将在%'%表中查找字段Header。你想使用一个insteaed字符串。要将撇号放在字符串文字中,请使用双撇号。

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

答案 7 :(得分:0)

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

希望这有帮助。

答案 8 :(得分:0)

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

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

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

迭代结果。