Sql server 检查字符串是否不存在';不包含其他字符串

Sql server 检查字符串是否不存在';不包含其他字符串,sql-server,tsql,string,Sql Server,Tsql,String,在T-SQL中,如何检查一个字符串是否不包含另一个字符串 我有一个nvarchar,可能是“橙子苹果” 我想做一个更新,例如,一个柱不包含“苹果” 如何做到这一点?或者,您可以使用以下方法: WHERE NOT (someColumn LIKE '%Apples%') WHERE CHARINDEX(N'Apples', someColumn) = 0 不确定哪一个性能更好-你必须测试它!:-) 马克 Update:性能似乎与另一个解决方案相当(在一些方面不喜欢'%Beal%%)——所以这

在T-SQL中,如何检查一个字符串是否不包含另一个字符串

我有一个
nvarchar
,可能是“橙子苹果”

我想做一个更新,例如,一个柱不包含“苹果”


如何做到这一点?

或者,您可以使用以下方法:

WHERE NOT (someColumn LIKE '%Apples%')
WHERE CHARINDEX(N'Apples', someColumn) = 0
不确定哪一个性能更好-你必须测试它!:-)

马克


Update:性能似乎与另一个解决方案相当(在一些方面不喜欢'%Beal%%)——所以这只是你个人偏好的问题。

使用这个作为你的条件

WHERE CHARINDEX('Apples', column) = 0 

您得到的答案假定为静态文本,以进行比较。如果要与另一列进行比较(例如,要联接两个表,并且要查找其中一个表中的列是另一个表中的列的一部分的表),可以这样做

WHERE NOT (someColumn LIKE '%' || someOtherColumn || '%')

为什么我没有想到这一点,我要做的是更高级的:)使用单引号而不是双引号:'%Apples%'。我试图编辑帖子,但要求编辑长度为6个字符或更多。-1:对于静态字符串“Apples”可以,但对于可能包含通配符(如“%”、“\ux”)的动态字符串无效。例如,如果搜索包含“5%降价”的列,则LIKE运算符也将匹配包含“50%降价”和“5美分降价”的列。在这些情况下,@marc_s使用CHARINDEX的解决方案将按预期工作,IMHO应该是可接受的答案。我将someColumn包装为ISNULL(someColumn“”),因为如果someColumn包含NULL,则上述表达式将无法按预期工作。请更准确地使用您的问题标题<代码>“包含另一个字符串”!=“不包含其他字符串”-1表示标题不准确。我更改了标题。迟到总比不迟到好:)如果其他列包含通配符(如“%”,“38290;”。+1:如果要匹配的文本是动态的而不是静态字符串(如“Apples”),则此方法更优越,因为您不需要担心通配符(如“%”),“\这将由LIKE运算符匹配。@Joe如果你想学究式地对待它,那么这个运算符也不会在所有情况下都起作用。CHARINDEX不区分大小写。因此,如果你在一片苹果地里寻找一个苹果,你会得到全部。我知道这篇文章发表已经有几年了,但仍然是。这两个答案都是有效的,取决于主题,没有一个答案涵盖所有基础。a-1从你那里得到的公认答案似乎有点。。。pernickety这个词对吗?@DDuffy-LIKE和CHARINDEX都受输入排序规则的影响,输入排序规则可能区分大小写,也可能不区分大小写。对于匹配用户输入的字符串,如果希望用户知道如何使用和转义通配符,则LIKE是合适的;如果用户只想匹配文本(例如,匹配所有包含“2%折扣”的值,而不无意中包括那些有20%折扣的值),则CHARINDEX更好。