0

システムからユーザーを削除する必要があり、検索は電子メールに基づいています。ただし、いくつかの奇妙な検証により、一部のユーザーは電子メールに一重引用符とワイルドカード (%) 文字を使用しています。

ユーザーを削除しようとすると、一重引用符やその他の奇妙な文字が原因でエラーが発生します。データベースで直接クリーンアップできますが、メール内のジャンクをすべて検索して、アプリから直接ユーザーを削除できるかどうかを確認したかったのです

例:

DELETE FROM Customers
WHERE Email = 'test@yahoo.com'@countag%and1=1''
4

4 に答える 4

1

パターンに一致しないため、ワイルドカード文字には問題ありませんが、単一引用符の場合は、エスケープするために二重にする必要があります。

DELETE FROM Customers
WHERE Email = 'test@yahoo.com''@countag%and1=1'''
                      --     ^ this           ^ and this.
于 2013-11-07T01:15:49.337 に答える
0
DROP TABLE UsersToDelete

CREATE TABLE UsersToDelete
(
    id        INT IDENTITY
   ,email     VARCHAR(500)
)


INSERT INTO UsersToDelete
  (
    -- id -- this column value is auto-generated
    email
  )
SELECT 'test@yahoo.com''@countag%and1=1''' AS email
UNION
SELECT 'bill.gates@microsoft.com'
UNION
SELECT 'user2675939@stackoverflow.com'
UNION
SELECT 'iamkarlson''''''@google.com'

SELECT utd.id
      ,utd.email
      ,CASE 
            WHEN (SUBSTRING(email ,CHARINDEX('''' ,email ,0) +1 ,1) <>'''' 
            OR SUBSTRING(REVERSE(email) ,CHARINDEX('''' ,REVERSE(email) ,0) +1 ,1) <>'''')
                 AND email LIKE '%''%'
                THEN 1
            WHEN SUBSTRING(email ,CHARINDEX('''' ,email ,0) +1 ,1) =''''
                 AND SUBSTRING(REVERSE(email) ,CHARINDEX('''' ,REVERSE(email) ,0) +1 ,1) =''''
                 AND email LIKE '%''%' 
                THEN 0
            ELSE 0
       END            AS [Contains]
      ,SUBSTRING(email ,CHARINDEX('''' ,email ,0) +1 ,1)
      ,SUBSTRING(REVERSE(email) ,CHARINDEX('''' ,REVERSE(email) ,0) +1 ,1)
FROM   UsersToDelete     utd
于 2013-11-07T09:27:25.687 に答える
0

あなたは試すことができます

delete from customers where charindex('''', email) > 0

少なくとも 1 つの一重引用符を含む電子メール アドレスを持つすべての顧客を削除するには ... または、最初に選択を実行して結果を確認します。

于 2013-11-07T06:29:02.883 に答える