2015-06-26 4 views
0

Я хочу, чтобы сделать поиск по имени и фамилии, и я использую этот запрос (SUR - фамилия, NAM - имяОшибка при создании SQL имя данных

Declare @name varchar(30) = 'Joh' //part or full name/surname or both 
SELECT (RTRIM(SUR) + ' ' + RTRIM(NAM)) AS name , W , SS FROM Table 
WHERE name like '%' + @name + '%' 

Но есть ошибка

Неверное имя столбца «имя».

мне нужно сделать поиск по 2 колонки в то же время. Это

(SUR like '%' + @name + '%') or (NAM like '%' + @name + '%') 

дал мне поиск только по 1 столбцу, как: Поиск: Джонс и я видим Джонаса, но если я хочу найти Джона Джонса, я не буду этого добиваться.

Помогите мне сделать поиск по 2 столбцам за это же время.

+3

Вы не можете ссылаться на псевдоним, как что - вам нужно использовать либо суб-выбрать или заменить 'WHERE имя LIKE' с' WHERE (RTRIM (СУР) + «» + RTRIM (NAM)) LIKE' – Siyual

+0

@Siyual yea. Благодарю . Это так просто и хорошо, что я об этом не думал –

ответ

4

Вы не можете использовать alias name в разделе where. Вы должны использовать свое выражение как в where clause

Declare @name varchar(30) = 'Surname' 
SELECT (RTRIM(SUR) + ' ' + RTRIM(NAM)) AS name , W , SS FROM Table 
WHERE (RTRIM(SUR) + ' ' + RTRIM(NAM)) like '%' + @name + '%' 
0

Вы можете использовать APPLY VALUES для достижения этой цели, а также.

Это не лучший дизайн SQL, так как вы не сможете воспользоваться индексацией.

Declare @name varchar(30) = 'Joh'; //part or full name/surname or both 

SELECT 
    Fullname.name AS name , 
    W , 
    SS 
FROM Table 
OUTER APPLY(VALUES(RTRIM(SUR) + ' ' + RTRIM(NAM)) Fullname(name) 
WHERE Fullname.name like '%' + @name + '%'; 
Смежные вопросы