SQL LIKE Statment, который применяется ко всему, вплоть до определенного символа - PullRequest
1 голос
/ 27 сентября 2019

Моя база данных содержит столбец для «веб-сайта» со следующими данными:

foo1.web.com
foo2.gov
doo3.shoo.net
baa.com
baa2.shoo.com

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

DELCARE @variable varchar(MAX);
SET @variable = 'oo';

SELECT * WHERE website LIKE '%' + @variable + '%' --(but only apply like statement up to the first .)

Итак, что я хотел бы получить обратно:

foo1.web.com
foo2.gov
doo3.shoo.net

, но это не учитывается

baa2.shoo.com

Спасибо запомощь заранее!

РЕДАКТИРОВАТЬ: Использование SQL Server

Ответы [ 4 ]

6 голосов
/ 27 сентября 2019

Для SQL Server вы можете посмотреть только левые N символов вашего URL для oo.Вы бы получили N символов слева, используя LEFT и CHARINDEX, чтобы найти первые .

SELECT * 
FROM @table
WHERE LEFT(val, CHARINDEX('.', val)) LIKE '%'+@variable+'%'
1 голос
/ 27 сентября 2019

Просто еще один вариант

Пример

Declare @YourTable Table ([website] varchar(50))
Insert Into @YourTable Values 
 ('foo1.web.com')
,('foo2.gov')
,('doo3.shoo.net')
,('baa.com')
,('baa2.shoo.com')


DECLARE @variable varchar(MAX);
SET @variable = 'oo';

Select * 
 from @YourTable
 where charindex('.',website+'.') > nullif(charindex(@variable,website),0)

Возвращает

website
foo1.web.com
foo2.gov
doo3.shoo.net
0 голосов
/ 27 сентября 2019

Допустим, столбец, который вы ищете в названии site, тогда я считаю, что вы можете использовать что-то вроде этого:

SELECT * FROM website WHERE `site` LIKE '%oo%' AND INSTR(`site`, 'oo')<INSTR(`site`, '.');

0 голосов
/ 27 сентября 2019

потому что oo может быть где угодно в полях:

DELCARE @variable varchar(MAX);
SET @variable = 'oo';

SELECT * WHERE website LIKE '%'+@variable+'%'
...