如何在同一SQL查询中引用自定义列

时间:2014-07-14 10:22:27

标签: sql sql-server-2008

我有一个包含First Name和Last Name列的表以及一个ID为PK的表。我的WHERE条件是对FullName的搜索操作,而不是单独的。

选择

select ID, FirstName + ' ' + LastName as FullName 
from tbl_Employee

我想要的是什么:

select ID, FirstName + ' ' + LastName as FullName 
from tbl_Employee 
where FullName like ''%' + @searchText + '%''

但是当我尝试使用别名FullName时,它不允许我这样做。我该如何处理这个问题?

3 个答案:

答案 0 :(得分:2)

您可以通过几种不同的方式构建查询。一,在where子句中包含concatenataion:

select
    e.ID,
    e.FirstName + ' ' + e.LastName as FullName 
from tbl_Employee as e
where e.FirstName + ' ' + e.LastName like '%' + @searchText + '%';

二,使用@lajja显示的子选择。

三,将其设置为非递归CTE。我觉得这个表格最容易阅读和理解:

;with EmployeeFullName as
(
    select
        e.ID,
        e.FirstName + ' ' + e.LastName as FullName
    from tbl_Employee as e
)
select
    f.ID,
    f.FullName
from EmployeeFullName as f
where f.FullName like '%' + @searchText + '%';

请注意:a)使用前导通配符和b)连接列,您将阻止优化器使用FirstNameLastName上的任何索引。

答案 1 :(得分:0)

请参考以下答案:

select Employee.* from (Select ID, FirstName + ' ' + LastName as FullName  from tbl_Employee ) as Employee 
where Employee.FullName like ''%' + @searchText + '%''

答案 2 :(得分:0)

你可以这样做

select ID, FirstName + ' ' + LastName as FullName 
from tbl_Employee 
where (FirstName + ' ' + LastName) like '''%' + @searchText + '%'''