2012-02-03 4 views
3

Я пишу запрос SQL сервера с помощью одного столбца в виде выражения, какИспользование Sql псевдоним столбца сервера в котором условие

Select name , name + age as Test from myTable 
where Test like '%b%'; 

Теперь я не могу использовать тест либо я должен написать

Select name , name + age as Test from myTable 
where (name + age) like '%b%'; 

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

Любая помощь с оценкой,

Спасибо

+0

Могу я узнать, в чем причина, по которой вы хотите сделать это? Вы хотите найти любую запись, которая соответствует вашим критериям фильтра в столбце имен или возрастов? –

+0

@ThitLwinOo, потому что иногда мое выражение слишком велико, поэтому я хочу использовать какой-то алист, поэтому я поставил вопрос здесь, чтобы я мог знать, возможно ли это или нет. – Moons

+0

Хорошо, я дал один ответ, пожалуйста, попробуйте. Позвольте мне знать, что это нормально для вас. –

ответ

6

Как об этом пути ..

select name, Test 
(
Select name , (name + age) as Test from myTable 
) t 
where Test like '%b%' 

Запрос должен быть изменен, как это имеет синтаксическую ошибку:

Так оно и должно быть записано как

select name from 
(
Select name , (name + age) as Test from myTable 
) t 
where Test like '%b%' 
+0

Я получаю синтаксическую ошибку при использовании запроса – Moons

2

Вы можете использовать крест, как это

select M.name , T.Test 
from myTable as M 
    cross apply(select name + age) as T(Test) 
where T.Test like '%b%'; 
+1

+1 для применения Cross. Но это немного дорогостоящее дело по сравнению с ответом Тит. –

+1

@AmarPalsapure - Те тесты, которые я сделал, не показывают разницы в планах запросов или времени выполнения. –

+0

В плане выполнения добавлен шаг «Вычислить скаляр», он добавляет к стоимости процессора. Это не очень важно, возможно, потому, что мой размер БД небольшой. –

Смежные вопросы