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

9 に答える 9

72

それらを2倍にして逃げます。

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

まず第一に、私の検索クエリ値はユーザーの入力からのものです。私はこれについてすべての答えを試しましたが、Googleが私に与えたすべての結果は、答えの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();

これで私の問題は解決します。 それでもセキュリティ上の問題がある場合は、訂正してください。

于 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 に答える