如何在T-SQL中使用带有变量的LIKE和CONCAT()

时间:2017-08-03 16:14:51

标签: sql-server tsql

我正在使用T-SQL进行查询。

目标:返回包含存储在变量中的名称的行。

我的问题:查询会返回所有行,而不进行过滤。

其他信息:名称存储为varchar,字母后面有几个空格,这就是为什么我要将变量与'%'连接起来。

此外,当我在变量末尾附加一个'%'运行查询时,数据库返回所有以'D'开头的记录。

我的查询

DECLARE @fName as varchar;
SET @fName='DILLON';

SELECT DISTINCT 
    e.FIRST_NAME, e.LAST_NAME, e.EMAIL_ADDRESS
FROM 
    [172.20.11.11].LSLMDB.dbo.vwEmployee e
JOIN 
    [172.20.11.11].LSLMDB.ls_apps.PAEMPLOYEE pa ON pa.EMPLOYEE = e.EMPLOYEE
JOIN
    [172.20.11.11].LSLMDB.ls_apps.PCODES pc ON pa.LOCAT_CODE = pc.CODE
JOIN
    [172.20.11.11].LSLMDB.ls_apps.PCODESDTL pcd ON pc.CODE = pcd.CODE 
WHERE 
    e.FIRST_NAME LIKE CONCAT('%',@fName,'%');

我感谢任何帮助的尝试!

1 个答案:

答案 0 :(得分:3)

问题是系统默认为DECLARE @fName as varchar(1) - 这可能不是你想要的。更改为DECLARE @fName as varchar(100);这应该按预期工作。

  

查询返回所有行,不进行过滤。

否它返回包含D的所有行。根据联合设置,这可能包括大写和小写匹配

  

此外,当我在变量末尾附加一个'%'运行查询时,数据库返回所有以'D'开头的记录。

由于它只是一个字符,因此过滤器变为D%,它将返回以D开头的所有记录。