2016-07-11 8 views
2

Я пытаюсь отфильтровать свой результирующий набор, чтобы возвращать только значения, начинающиеся с NIR_.Фильтр в выборе где значения начинаются с NIR_

My SQL заявление сделать это следующим образом

select * from run where name like %NIR_% 

Результирующий набор также включает в себя такие имена, как

NIRMeta_Invalid 
NIRMeta_Position 

Я не уверен, что я делаю неправильно. Мне нужно только выбрать имена, начинающиеся с NIR_.

ответ

3

Вам нужно избегать подчеркивания в шаблоне LIKE, если вы хотите, чтобы его рассматривали как литерал.

В SQL Server:

select * from run where name like 'NIR[_]%' 

В MySQL и Oracle:

select * from run where name like 'NIR\_%' 
+0

К сожалению, я забыл упомянуть, я с помощью SQL Server 2014. Да сначала выберите заявление работы. Спасибо. – Abe

1

Если вы хотите имена, которые только начинаются с NIR, затем удалите первый групповой символ в like шаблоне :

where name like 'NIR_%' 

Обратите внимание, что _ также подстановочная, так что вы, вероятно, хотите:

where name like 'NIR\_%' 
0

Вы можете использовать ESCAPE вариант для достижения этой цели.

SELECT * FROM run WHERE name LIKE 'NIR#_%' ESCAPE '#' 

выполнения образца с заданной данными:

DECLARE @Run TABLE (name VARCHAR (100)); 

INSERT INTO @Run (name) VALUES 
('NIR_MA'), ('NIR_RUN'), ('NIRMeta_Invalid'), ('NIRMeta_Position'); 

SELECT * FROM @Run WHERE name LIKE 'NIR#_%' ESCAPE '#' 

Результат:

name 
----- 
NIR_MA 
NIR_RUN