2012-02-03 73 views
3

我写有一列一个SQL Server查询像使用SQL Server列别名在条件

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

我可以知道你想这么做的原因是什么?您想要查找符合过滤条件的名称或年龄栏中的任何记录吗? – 2012-02-03 06:55:18

+0

@ThitLwinOo因为有时我的表情太大,所以我想使用一些alist,所以我把这个问题放在这里,以便我可能知道这是否可能 – Moons 2012-02-03 06:58:18

+0

好的,我提供了一个答案,请尝试。让我知道你想要什么都可以。 – 2012-02-03 07:01:38

回答

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 2012-02-03 07:24:52

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进行交叉应用时,出现语法错误。但是,与Thit的答案相比,这件事情的代价更小。 – 2012-02-03 07:15:49

+1

@AmarPalsapure - 我所做的测试没有显示查询计划或执行时间的任何差异。 – 2012-02-03 07:46:10

+0

在执行计划中,增加了“Compute Scalar”步骤,它增加了CPU成本。这不是很重要,但可能是因为我的数据库规模很小。 – 2012-02-03 07:48:38