使用\ d选择值

时间:2016-05-18 16:08:16

标签: sql postgresql

我有一张价值表:

--Product--
ASUS22
ASUSI522
ASUSI7256
ASUSI2262
ASUSI1267
ASUSI764
ASUSI712

等等。我正在尝试用ASUSI开始选择产品,之后只有3个整数。

有人说我可以使用\ d \ d \ d来实现这一点,但它不起作用(下图)

select product from products where product like '%ASUS\d\d\d%'

所以我想选择值:

ASUSI712
ASUSI764
ASUSI522

怎么办呢? 谢谢, 的问候,

4 个答案:

答案 0 :(得分:1)

要使用字符类,您需要使用SIMILAR TO代替LIKE

select product from products where product similar to '%ASUS\d\d\d'

正如@ lad2025所述,您的原始查询与您的期望不符,因此您需要删除最终%以将匹配限制为三个数字。

答案 1 :(得分:1)

要匹配字符串ASUSI的正则表达式,其后面是正好三位数:

^ASUSI\d{3}$

^ASUSI  - starts with 'ASUSI'
\d{3}   - followed by exactly three digits
$       - followed by the end of the string

SELECT product
FROM products
WHERE product ~ '^ASUSI\d{3}d$'

答案 2 :(得分:0)

可能有更直接的方式,但您可以使用length()来实现此目的:

SELECT product
FROM   products
WHERE  product like 'ASUSI%'
AND    length(product) = 8
AND    product ~ '\d$'

答案 3 :(得分:-1)

这个怎么样?使用LIKE ASUSI并使用3个字符检查范围1到9。

DECLARE @test TABLE(Product VARCHAR(15))
INSERT INTO @test(Product)
VALUES('ASUS22'),
('ASUSI522'),
('ASUSI7256'),
('ASUSI2262'),
('ASUSI1267'),
('ASUSI764'),
('ASUSI712'),
('ASUSI72K'),
('ASUSI7234')

SELECT *
FROM @test

SELECT *
FROM @test
WHERE Product LIKE 'ASUSI[1-9][1-9][1-9]'