Использование 'LIKE' с предложением 'IN', полным строк - PullRequest
5 голосов
/ 05 апреля 2011

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

SELECT * FROM emailaddresses where addr in ('john@google.com', 'jim@google.com')

Но если в таблице 'JOHN@google.com' есть значение addr, я хочу, чтобы оно вернулось.

Вроде как:

SELECT * FROM emailaddresses where addr LIKE in ('john@google.com', 'jim@google.com')

Как мне это сделать?

Ответы [ 6 ]

9 голосов
/ 05 апреля 2011

поместите значения в таблицу и используйте join вместо in:

SELECT * FROM emailaddresses as ea
INNER JOIN addresses as a
ON ea.address like '%' + a.address + '%'
2 голосов
/ 05 апреля 2011

Вы можете использовать функцию LOWER

SELECT * FROM emailaddresses where LOWER(addr) in ('john@google.com', 'jim@google.com')

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

1 голос
/ 05 апреля 2011

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

Установка SQL Server по умолчанию не чувствительна к регистру.

Если вы хотите сравнивать без учета регистра, потому что у вас есть база данных с учетом регистра, вы можете привести .Я считаю, что это подходящий синтаксис (хотя я никогда не использовал его для списка IN на одной стороне выражения).

SELECT *
FROM emailaddresses
WHERE addr COLLATE SQL_Latin1_General_CP1_CI_AS 
IN (
    'john@google.com' COLLATE SQL_Latin1_General_CP1_CI_AS
    ,'jim@google.com' COLLATE SQL_Latin1_General_CP1_CI_AS
)

Реальный случай для LIKE будет что-то вродеaddr LIKE '%@google.com"

0 голосов
/ 05 апреля 2016

Мы можем использовать подход «LIKE-In» вместе в SQL, но в несколько ином стиле, как показано ниже:

SELECT * 
FROM emailaddresses 
WHERE addr LIKE 'john@google.com' OR addr LIKE 'jim@google.com'
0 голосов
/ 25 января 2012
select * from HotelAmenities_ 
where Pamenities in (
            select distinct(pamenities) 
            from HotelAmenities_ 
            where pamenities like '%Swimming%'
        )
0 голосов
/ 06 апреля 2011

Попробуйте использовать перекрестное соединение с таблицей, содержащей список адресов электронной почты, которые вы хотите найти:

declare @email table(
email_check nvarchar(500) not null)

insert into @email(email_check)
values('jack@google.com')
insert into @email(email_check)
values('john.@google.com')



select hit, ID, EMAIL_ADDRESS from (
    select CHARINDEX(email_check, lower(EMAIL_ADDRESS)) hit, ID, EMAIL_ADDRESS
    from Table_With_Email_Addresses
    ,@email
) t
where hit > 0

Нет необходимости в "лайке", поскольку он будет анализировать строку, чтобы найти совпадение. Ура! * * 1004

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...