SQL Server PATINDEX与精确字符串匹配

SQL Server PATINDEX与精确字符串匹配,sql,sql-server,sql-server-2008,tsql,patindex,Sql,Sql Server,Sql Server 2008,Tsql,Patindex,在表XXXX中有XY、AB、ABC、XYZ等列。现在我只想排除XYZ和ABC列,并使用PATINDEX保留AB和XY列。我不能这样做,因为只有第一列被排除。如果我从PATINDEX中删除开头的%,那么XYZ和XY都将被删除。我如何解决这个问题。您想要的是CHARINDEX,而不是PATINDEX SELECT * FROM SYS.COLUMNS WHERE NAME NOT IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE

在表XXXX中有XY、AB、ABC、XYZ等列。现在我只想排除XYZ和ABC列,并使用PATINDEX保留AB和XY列。我不能这样做,因为只有第一列被排除。如果我从PATINDEX中删除开头的%,那么XYZ和XY都将被删除。我如何解决这个问题。

您想要的是CHARINDEX,而不是PATINDEX

SELECT * FROM SYS.COLUMNS WHERE
NAME NOT IN (SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'XXXX'
AND PATINDEX('%' + COLUMN_NAME + '%', 'ABC;XYZ') <> 0);

我想知道的是,我应该使用;还是有更好的办法?此外,您的查询同时选择XY和XYZ,这不是所需的行为。请参阅更新的答案以处理XY和XYZ选择-添加“;”搜索字符串的终止符。分隔符是什么并不重要,因为您正在搜索字符串的出现。
   SELECT * FROM SYS.COLUMNS 
    WHERE NAME NOT IN (
      SELECT COLUMN_NAME
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_NAME = 'XXXX'
      AND CHARINDEX(COLUMN_NAME + ';', 'ABC;XYZ;') > 0
    );