2016-05-18 3 views
4

У меня есть таблица со значениями:значения Выбор с помощью д

--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 

Как это можно сделать? Спасибо, С уважением,

+0

Когда вы говорите 'doesnt work', что означает? ошибки или неправильного результата? –

+0

Он просто возвращает пустой –

+0

'ASUSI522aaa' должен быть возвращен или нет? – lad2025

ответ

1

Для того, чтобы использовать классы символов, вам нужно использовать SIMILAR TO вместо LIKE:

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

Как @ lad2025 заметки, исходный запрос не соответствует вашим ожиданиям, так что вам нужно удалить окончательный % ограничить матч до трех чисел.

+0

'ASUS7256' будет возвращено – lad2025

+1

@ lad2025: Правда, я думал, что было задано регулярное выражение. Спасибо за хедз-ап. – zb226

0

Там может быть более прямым путем, но вы можете использовать length() для достижения этой цели:

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

"product" ~ '\ d $', чтобы быть уверенным, что последние 3 символа - это число –

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$' 
+0

Вы работаете с Java или что-то еще? Я просто попробовал его в 'psql', и он отлично работает без каких-либо экранов. – zb226

-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]' 
+0

'\ d' включает 0s. Это не так. Это не соответствовало бы тонне потенциальных результатов. –

+0

, то вы можете использовать [0-9] для включения 0s. Можете ли вы дать мне один пример, это не может привести к каким-либо результатам? – Murthy

+0

'LIKE' не поддерживает« регулярные выражения »в SQL –

Смежные вопросы