我对此声明有疑问。我希望有一个字符串' O'但没有' G'。 第三行WHERE有效,但是可以像其他人一样以更简单的方式编写吗?
select * from
(select '1XGOX' as x union
select '2XOGX' as x union
select '3XO' as x union
select '4XG' as x) as y
where
--x like '%[O^G]%'
--x like '%[O]%[^G]%'
x like '%[O]%' and x not like '%[G]%'
所需的输出3XO(有' O'以及没有' G')
答案 0 :(得分:3)
与匹配器一样, NOT 正则表达式。您可以删除字符类括号:
where x like '%O%' and x not like '%G%'
但这就像你得到的那样接近。
如果我们更多地了解这些代码代表什么,以及为什么某些角色出现并且似乎处于某些位置,我们可能会做得更好一些。但就是这样,这就是你所需要的。
答案 1 :(得分:2)
SQL Server不支持完整的正则表达式(尽管与正则表达式的比较并不简单)。我认为两步比较是最简单的方法。
对于你的例子," G"与" O"相邻,您可以这样做:
where 'O' + y.x + 'O' like '%[^G]O[^G]%'
左边的字符串操作处理" O"在字符串的开头/结尾。
但是,我发现这两个比较更容易理解 - 它们几乎是你的状态的直接翻译。