【问题标题】:SQL Server PATINDEX to match exact stringSQL Server PATINDEX 以匹配确切的字符串
【发布时间】:2013-06-20 12:26:16
【问题描述】:
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);

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

【问题讨论】:

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


    【解决方案1】:

    您需要 CHARINDEX,而不是 PATINDEX。

       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
        );
    

    【讨论】:

    • 我想知道的是我应该使用; 分隔符放置列名还是有更好的方法?此外,您的查询同时选择了 XYXYZ,这不是所需的行为。
    • 查看更新的答案以处理 XY 和 XYZ 选择 - 添加了 ';'搜索字符串的终止符。分隔符是什么并不重要,因为您正在搜索字符串的出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多