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

Dil*_*ess 4 t-sql sql-server

我正在使用 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,'%');
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助的尝试!

Hog*_*gan 5

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

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

不,它返回所有包含D. 根据合并设置,这可能包括大写和小写匹配

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

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