MSSQL WHERE LIKE使用Caret我想要1个字符但我不想要另一个

时间:2018-02-01 14:38:23

标签: sql sql-server sql-like

我对此声明有疑问。我希望有一个字符串' 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')

2 个答案:

答案 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"在字符串的开头/结尾。

但是,我发现这两个比较更容易理解 - 它们几乎是你的状态的直接翻译。