【问题标题】:SQL like % delete records?SQL之类的%删除记录?
【发布时间】:2016-12-12 15:16:42
【问题描述】:

我有删除查询,应该删除所有不匹配 01 或 10 的记录。这两个数字在用破折号分隔的单词前面。看起来像这样:

Column_1
01-Test1
01-Test2
10-Test3
10-Test4

我的查询应该删除单词前面不匹配 01 和 10 的所有记录。这是我的查询:

DELETE FROM MyRecords
WHERE Column_1 NOT LIKE '01%' OR Column_1 NOT LIKE '10%'

由于某种原因,上面的查询从上面的列表中删除了所有记录。我不确定我在哪里错过了删除所有记录的东西。如果有人看到问题,请告诉我。谢谢。

【问题讨论】:

    标签: sql-server sql-server-2008 tsql sql-delete


    【解决方案1】:

    将您的 OR 更改为 AND

    DELETE FROM MyRecords
    WHERE Column_1 NOT LIKE '01%' AND Column_1 NOT LIKE '10%'
    

    另一种选择

    DELETE FROM MyRecords
    WHERE Left(Column_1,2)  NOT IN ('01','10')
    

    (更具可读性但不会使用索引)

    【讨论】:

      【解决方案2】:

      首先确定要保留哪些记录('01%' & '10%'),

      Select * MyRecords WHERE (Column_1 LIKE '01%' OR Column_1 LIKE '10%');
      

      然后在条件前面加上一个 NOT 并将其更改为删除。

      DELETE FROM MyRecords WHERE NOT (Column_1 LIKE '01%' OR Column_1 LIKE '10%');
      

      这使得检查您要删除的记录变得非常容易。

      【讨论】:

      • 如果您能解释一下为什么您的代码解决了 OP 的问题,那就太好了。可以在审查队列中删除纯代码答案。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2010-10-24
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 2021-02-13
      • 1970-01-01
      相关资源
      最近更新 更多