喜欢但不喜欢

时间:2016-07-05 13:57:08

标签: sql firebird

我有一个充满公司代码前缀的表(cp-partnum,ag-partnum,ff-partnum)。我想选择以'cp-partnum'开头的所有代码,其中partnum不以'I'或'i'开头。所以'cp-aaa'是可以接受的,但'cp-iaa'不是。怎么能实现这一目标?

编辑:要清楚,我只想以'cp- [字母不是“I”或“i”]的字母开头的代码''

5 个答案:

答案 0 :(得分:3)

您可以使用SIMILAR TO和(SQL)正则表达式:

yourcolumn SIMILAR TO 'cp-[^iI]%'

如果公司总是2(字母)字符,您可以执行以下操作:

yourcolumn SIMILAR TO '[:ALPHA:]{2}-[^iI]%'

如果公司代码可以是任意两个字符,您可以使用

yourcolumn SIMILAR TO '__-[^iI]%'

对于更复杂的模式,请研究文档。从Firebird 2.5开始,SIMILAR TO可用。

答案 1 :(得分:2)

使用以下查询:

select *
from companies 
where company_code like '__-%' 
and company_code not like '__-I%' 
and company_code not like '__-i%'

答案 2 :(得分:2)

您只能使用SUBSTRINGNOT IN {1}}

LIKE

答案 3 :(得分:1)

你可以这样做:

where col like 'cp-%' and
      col not like 'cp-l%' and
      col not like 'cp-i%'

对于多个前缀:

where left(col, 2) in ('cp', 'ag', 'ff') and
      substring(col, 4, 1) not in ('l', 'i') and
      col like '__-%'

答案 4 :(得分:0)

我想我不需要支持小写字母,所以以下工作。

SELECT * FROM product 
WHERE product.num LIKE 'CP-%'
AND product.num NOT IN (SELECT product.num FROM product 
    WHERE product.num LIKE 'CP-I%')