MSSQL WHERE LIKE 使用 Caret 我想要 1 个字符,但我不想要另一个
MSSQL WHERE LIKE using Caret I want 1 char but I dont want another one
我对这个说法有疑问。我想要 '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')
类似匹配器是 NOT 正则表达式。可以去掉字符 class 中括号:
where x like '%O%' and x not like '%G%'
但这已经很接近了。
如果我们更多地了解这些代码代表什么,以及为什么某些字符会出现并且看起来位于某些位置,我们可能会做得更好一些。但实际上,这就是您所需要的。
SQL 服务器不支持完整的正则表达式(尽管与正则表达式的比较并不简单)。我认为两步比较是最简单的方法。
对于您的示例,如果 "G" 与 "O" 相邻,您可以这样做:
where 'O' + y.x + 'O' like '%[^G]O[^G]%'
左侧的字符串操作在字符串的 beginning/end 处理 "O"。
不过,我发现这两个比较更容易理解 -- 它们几乎是对您的陈述的直接翻译。
我对这个说法有疑问。我想要 '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')
类似匹配器是 NOT 正则表达式。可以去掉字符 class 中括号:
where x like '%O%' and x not like '%G%'
但这已经很接近了。
如果我们更多地了解这些代码代表什么,以及为什么某些字符会出现并且看起来位于某些位置,我们可能会做得更好一些。但实际上,这就是您所需要的。
SQL 服务器不支持完整的正则表达式(尽管与正则表达式的比较并不简单)。我认为两步比较是最简单的方法。
对于您的示例,如果 "G" 与 "O" 相邻,您可以这样做:
where 'O' + y.x + 'O' like '%[^G]O[^G]%'
左侧的字符串操作在字符串的 beginning/end 处理 "O"。
不过,我发现这两个比较更容易理解 -- 它们几乎是对您的陈述的直接翻译。