像T-SQL中的谓词

时间:2018-07-20 07:01:12

标签: sql tsql

检索产品编号,名称和标价,其产品编号以“ BK-”开头,后跟“ R”以外的任何字符,并以“-”结尾,后跟任意两个数字。问题属于我正在处理的实验室文件。以下是我尝试过的方法:

Select p.ProductNumber, p.Name,p.ListPrice,p.ProductNumber
From SalesLT.Product as p
Where p.ProductNumber Like 'BK-%[^r]%-[0-9][0-9]'

Column Name
FR-R32B-78
FR-R32R-78
HL-U703-R
HL-U703
SO-B303-M
SO-B303-L
HL-U703-B
CA-1038
LJ-0132-S
LJ-0132-M
BK-M82S-32
BK-M82S-33
BK-M82S-38
BK-R33R-62
BK-R33R-44

2 个答案:

答案 0 :(得分:3)

问题是您在[^ r]之前有%

Select p.ProductNumber, p.Name,p.ListPrice,p.ProductNumber
From SalesLT.Product as p
Where p.ProductNumber Like 'BK-[^r]%-[0-9][0-9]'

我认为这应该很好。

原因是%[^ r]%表示-任何符号后跟非r后跟任何符号。对于任何一个人都是如此。

示例R33R-> R是任何符号,3不是r,3R是任何符号。

答案 1 :(得分:1)

declare @t table (ProductNumber varchar(100));
insert into @t
values 

('FR-R32B-78'),
('FR-R32R-78'),
('HL-U703-R'),
('HL-U703'),
('SO-B303-M'),
('SO-B303-L'),
('HL-U703-B'),
('CA-1038'),
('LJ-0132-S'),
('LJ-0132-M'),
('BK-M82S-32'),
('BK-M82S-33'),
('BK-M82S-38'),
('BK-R33R-62'),
('BK-R33R-44')

Select *
From @t
Where ProductNumber Like 'BK-%-[0-9][0-9]' and ProductNumber not like '___R%';