1

我有这个没有正确比较的 SQL 查询,所以我把它注释掉了 WHERE 子句。返回 AF.ActivityNote 时,无论我是否对其进行 RTRIM,它后面总是有 2 个空格。我认为这些空格是不允许注释的 WHERE 子句正确匹配字符串与 userfield33 的问题。

  SELECT CAST(UF.UserField33 AS NVARCHAR) , RTRIM(CAST(AF.ActivityNote AS NVARCHAR))
        FROM [BCMTEST01].[dbo].[ActivityContacts] as AC INNER JOIN [BCMTEST01].[dbo].[ActivityFullView] as AF
            ON AC.ActivityID = AF.ActivityID INNER JOIN [BCMTEST01].[dbo].[OpportunityExportView] as OP
            ON AC.ContactID = OP.ContactServiceID INNER JOIN [BCMTEST01].[dbo].[UserFields] as UF
            ON OP.ContactServiceID = UF.ContactServiceID
            WHERE ContactID = 8376
        --WHERE  RTRIM(CAST(UF.UserField33 AS NVARCHAR) = RTRIM(CAST(AF.ActivityNote AS NVARCHAR))
        ORDER BY ContactID ASC
4

1 回答 1

5

首先,在转换为、、和时,您应该始终包含长度。所以使用类似的东西:nvarcharvarcharcharnchar

cast(uf.userfield33 as nvarchar(255)) -- or whatever length you like, so long as you have something

最后两个字符不是空格。执行以下操作:

select ascii(right( AF.ActivityNote, 1))

看看字符值是多少。然后你可以用replace它来摆脱它。或者,您可以只去掉最后两个字符(如果这适用于您的应用程序)。

顺便说一句,我假设您正在使用基于查询语法的 SQL Server。

这是一个替代where条款:

where (case when right(AF.ActivityNote, 2) = char(10)+CHar(13)
            then LEFT(AF.ActivityNote, LEN(AF.ActivityNote) - 2)
            else AF.ActivityNote
       end) = CAST(UF.UserField33 AS NVARCHAR(255)

我不是从句中的case陈述的忠实粉丝。where我实际上会将逻辑放在子查询中。另外,我可能有 10/13 倒数的顺序。

于 2013-02-04T21:34:28.740 回答