Как объединить значения строк для использования в предложении WHERE запроса T-SQL - PullRequest
5 голосов
/ 23 сентября 2010

Я хочу написать запрос в T-SQL, чтобы выполнить поиск по двум объединенным столбцам. Два столбца - это имя и имя. Вот что у меня есть:

SELECT
    fname,
    lname,
    ...
FROM
    users
JOIN
    othertable ON foo=bar
WHERE
    fname+' '+lname LIKE '%query%'

SQL-серверу не нравится этот синтаксис. Как мне структурировать запрос так, чтобы я мог выполнять операцию WHERE LIKE, которая выполняет поиск по двум объединенным столбцам, что позволяет мне искать полное имя пользователя, а не только имя и фамилию по отдельности?

Ответы [ 3 ]

5 голосов
/ 23 сентября 2010

Я могу только предположить, что один из fname или lname имеет значение NULL, поэтому LIKE завершается неудачей. (NULL concat что-либо имеет значение null)

Попробуйте

...
ISNULL(fname, '') + ' ' + ISNULL(lname, '') LIKE '%query%'

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

4 голосов
/ 23 сентября 2010

Я предлагаю добавить вычисляемый столбец в вашу таблицу для full_name Примеры вычисляемых столбцов:

--drop table #test
create table #test (test varchar (10) , test2 varchar (5),[Calc]  AS right(test, 3))
Insert #test
values('hello', 'Bye')
Insert #test
values('hello-bye', null)


Alter table #test
add [MyComputedColumn]  AS substring(test,charindex('-',test), len(test)),
Concatenatedcolum as test+ ' ' +test2
select * from #test

Как видите, вам, возможно, придется немного поиграть, пока не получите желаемый результат. Сначала сделайте это во временной таблице, чтобы избежать многократной реструктуризации таблицы базы данных. Для имен, особенно если вы используете отчество, которое часто пустое, вам может понадобиться добавить код для обработки нулей. Иногда вам также может понадобиться код для приведения к одному и тому же типу данных, если один файл, который вы объединяете, является, например, int, а другой - varchar.

0 голосов
/ 23 сентября 2010

Я думаю, что одно из условий соединения может вызвать проблемы.Попробуйте переписать его, вы можете обнаружить, что ошибка исчезла;)

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