Приветствую, коллеги, вот вопрос. Есть некое поле (допустим поле "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. Это реализуемо вообще?
Нравится
Приветствую
Такую функциональность можно написать с помощью комбинации фильтров 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"