像operator-sql server 2008一样使用时不生成正确的输出

时间:2017-04-06 11:12:14

标签: sql tsql

我的SQL服务器是区分大小写的:Latin1_General_CI_AS

我有2张表,如下所示。

DECLARE @TABLEA TABLE
(
CUSTNAME VARCHAR (100)
)

INSERT @TABLEA

SELECT 'ONE STOP MOTORIST CENTRE'


DECLARE @TABLEB TABLE
(
CUSTNAME VARCHAR (100)
)

INSERT @TABLEB

SELECT 'ONE STOP MOTORIST CENTRE & BODYSHOP' UNION ALL
SELECT 'One Stop Motorist Centre (Cambridge' UNION ALL
SELECT 'One Stop Motorist Centre (Cambridge' UNION ALL
SELECT 'One Stop Motorist Centre & Bodyshop'

但是当我在查询之下运行时,我没有得到它,它没有给出任何结果。

SELECT * FROM @TABLEA A INNER JOIN @TABLEB B ON  '%'+ UPPER(A.[CUSTNAME])+'%' like '%'+ UPPER(B.[CUSTNAME])+'%'

任何人都可以建议我必须做些什么来获得结果。

1 个答案:

答案 0 :(得分:0)

该模式位于like右侧侧。以你的例子:

SELECT *
FROM @TABLEA A INNER JOIN
     @TABLEB B
     ON UPPER(B.[CUSTNAME]) LIKE '%'+ UPPER(A.[CUSTNAME])+'%';

如果要包含在任一方向,请使用以下两个条件:

SELECT *
FROM @TABLEA A INNER JOIN
     @TABLEB B
     ON UPPER(B.[CUSTNAME]) LIKE '%'+ UPPER(A.[CUSTNAME])+'%' OR
        UPPER(A.[CUSTNAME]) LIKE '%'+ UPPER(B.[CUSTNAME])+'%';

我还应该注意,默认情况下,SQL Server不区分大小写。在大多数情况下,您不需要对值进行大写。