我有一个充满公司代码前缀的表(cp-partnum,ag-partnum,ff-partnum)。我想选择以'cp-partnum'开头的所有代码,其中partnum不以'I'或'i'开头。所以'cp-aaa'是可以接受的,但'cp-iaa'不是。怎么能实现这一目标?
编辑:要清楚,我只想以'cp- [字母不是“I”或“i”]的字母开头的代码''
答案 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)
您只能使用SUBSTRING
和NOT 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%')