SQL Server PATINDEX 以匹配确切的字符串
Posted
技术标签:
【中文标题】SQL Server PATINDEX 以匹配确切的字符串【英文标题】:SQL Server PATINDEX to match exact string 【发布时间】: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
等列。现在我只想排除XYZ
和ABC
列,并使用PATINDEX
保留AB
和XY
列。我不能这样做,因为只有第一列被排除在外。如果我从PATINDEX
中删除开头的%
,那么XYZ
和XY
都将被删除。我该如何解决这个问题。
【问题讨论】:
【参考方案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
);
【讨论】:
我想知道的是我应该使用;
分隔符放置列名还是有更好的方法?此外,您的查询同时选择了 XY
和 XYZ
,这不是所需的行为。
查看更新的答案以处理 XY 和 XYZ 选择 - 添加了 ';'搜索字符串的终止符。分隔符是什么并不重要,因为您正在搜索字符串的出现。以上是关于SQL Server PATINDEX 以匹配确切的字符串的主要内容,如果未能解决你的问题,请参考以下文章
sql server charindex函数和patindex函数详解(转)
Sql Server REPLACE函数的使用;SQL中 patindex函数的用法
sql server的一些函数------CHARINDEX(),PATINDEX(),STUFF(),SUBSTRING(),RIGHT(),LEFT()