使用带有LIKE运算符的SUBSTRING的SQL Server不返回任何结果

时间:2016-02-04 15:52:39

标签: sql sql-server

我创建了这个CTE,它从2个不同的表中返回名字和姓氏。我想使用CTE来识别具有相同姓氏的所有记录,并且一列的第一个名称以另一列的相同第一个字母开头。 这是CTE结果的一个例子。我希望使用CTE的SELECT仅返回突出显示的结果:

Query Results

;WITH CTE AS
            (
            SELECT AD.FirstName AS AD_FirstName, AD.LastName AS AD_LastName, NotInAD.FirstName As NotInAD_FirstName, NotInAD.LastName As NotInAD_LastName 
            FROM PagingToolActiveDirectoryUsers AD JOIN 
                (
                SELECT FirstName, LastName
                FROM #PagingUsersParseName
                EXCEPT
                SELECT D.FirstName, D.LastName
                FROM PagingToolActiveDirectoryUsers D 
                WHERE D.FirstName <> D.LastName AND D.LastName <> D.LoginName
                    AND D.LoginName LIKE '%[0-9]%[0-9]%'        
                ) AS NotInAD ON NotInAD.LastName = AD.LastName
            )
            SELECT *
            FROM CTE
            WHERE (AD_LastName = NotInAD_LastName) AND (AD_FirstName LIKE ('''' + SUBSTRING(NotInAD_FirstName, 1, 1) + '%''')) 
            ORDER BY AD_LastName, AD_FirstName;

此查询的结果不返回任何行。 我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

您使用单引号将要搜索的字符串括起来,但AD_FirstName中的数据不会嵌入其中的单引号。我建议你用{/ 1>替换WHERE子句的第一行

WHERE (AD_LastName = NotInAD_LastName) AND (AD_FirstName LIKE (SUBSTRING(NotInAD_FirstName, 1, 1) + '%'))

祝你好运。