如何在concat列上执行通配符搜索?

时间:2014-01-27 12:02:53

标签: sql sql-server

假设我有名字,姓氏 现在我连接名字,姓氏如下

SELECT CONVERT (nvarchar(50), first_name) + ' ' + CONVERT (nvarchar(50), last_name) AS full_name from usertable

现在我想在full_name上执行%通配符搜索,如下所示

SELECT CONVERT (nvarchar(50), first_name) + ' ' + CONVERT (nvarchar(50), last_name) AS full_name from usertable Where full_name like 'hos%'

有可能吗? 顺便说一下,我不想为此创建一个视图!

4 个答案:

答案 0 :(得分:2)

你必须这样做。

SELECT CONVERT (nvarchar(50), first_name) + ' ' + CONVERT (nvarchar(50), last_name) AS full_name 
from usertable 
Where (CONVERT (nvarchar(50), first_name) + ' ' + CONVERT (nvarchar(50), last_name)) like 'hos%'

答案 1 :(得分:1)

执行此类连接操作的另一种方法是使用类似这样的ISNULL函数

SELECT ISNULL(CONVERT(nvarchar(50), first_name) + ' ', '') 
             +  ISNULL(CONVERT(nvarchar(50), last_name),'')
WHERE ISNULL(CONVERT(nvarchar(50), first_name) + ' ', '') 
             +  ISNULL(CONVERT(nvarchar(50), last_name),'') LIKE 'hos%'

答案 2 :(得分:1)

我建议你使用子查询:

select ut.*
from (SELECT CONVERT (nvarchar(50), first_name) + ' ' + CONVERT (nvarchar(50), last_name) AS full_name
      from usertable
     ) ut
Where full_name like N'hos%';

这很有用,因为您不必在两个地方重复表达 - 这可能会导致维护问题。

但是,您正在寻找全名的方式,看起来您只关心名字。所以这也有效:

SELECT CONVERT (nvarchar(50), first_name) + ' ' + CONVERT (nvarchar(50), last_name) AS full_name
from usertable
where first_name like N'hos%'

请注意,我还将常量更改为显式位于国家字符集中,因为您要将列转换为nvarchar()

答案 3 :(得分:0)

您可以从子查询中获取全名,然后使用比较运算符'Like':

 SELECT full_name
    FROM(SELECT * 
    ,CONVERT (nvarchar(50), first_name) + ' ' + CONVERT (nvarchar(50), last_name) AS full_name from usertable)t1
    WHERE full_name like 'hos%'