Вопрос

Поиск по подстроке в обратную сторону

Приветствую, коллеги, вот вопрос. Есть некое поле (допустим поле "Name" в таблице "Printers"). Но поле не всегда корректно заполнено (т.е. вместо HP LJ 1100 например там содержится только "1100"), приходит при этом значение корректное (т.е. HP LJ 1100). Мне  же нужно выбрать такие записи таблицы, где значение Name входит во входящую строку (фильтр contain или LIKE SQL, только наоборот). Таким образом нужно сделать аналог вот такой sql функции:

SELECT Name, CHARINDEX ('1100', Name) as Pos

FROM [!test].[dbo].[Printer]

where CHARINDEX ('1100', Name) > 0

средствами esq. Это реализуемо вообще?

Нравится

3 комментария

Приветствую

Такую функциональность можно написать с помощью комбинации фильтров contain и not start with. А именно CONTAIN and NOT_START_WITH

Артем Гура,

Приветствую, прошу прощения, не понял? Левая часть выражения (значение Name в справочнике) равна "1100", правая часть выражения (строковая переменная) равна "HP LJ 1100". И как вы это себе представляете? Если бы наоборот было - так никаких проблем. То, что вы предлагаете будет выглядеть как: (xxxx.CONTAIN, Name, "HP LJ 1100") AND (xxxxx.NOT_START_WITH, "HP LJ 1100"), если я правильно понял? 

Дмитрий, тогда я не совсем понял :) 

К примеру данные:

1   HP Lj 1100
2   1100

Ваш запрос 

SELECT Name, CHARINDEX ('1100', Name) as Pos
FROM [!test].[dbo].[Printer]
where CHARINDEX ('1100', Name) > 0

выдаст одну запись: HP Lj 1100. При  этом, как я понял, параметр поиска будет = "1100"

Этот запрос на SQL можно и так сделать:

Select Name 
from ... [Printers]
where 
   Name like '%1100%' 
and
   Name not like '1100%'

если перевести на ESQ, то 

Name like '%1100%'     - это CONTAIN
Name not like '1100%'  - это NOT_START_WITH

при этом входящим параметром будет "1100"

Таким образом вы найдете все строки, в которые входит 1100, но не начинается с "1100"

Показать все комментарии