1

正しく比較されていないこのSQLクエリがあるので、WHERE句をコメントアウトしました。AF.ActivityNoteを返す場合、RTRIMを実行するかどうかに関係なく、AF.ActivityNoteの後には常に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

最後の2文字はスペースではありません。次のようなことをします:

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

文字値が何であるかを確認します。replaceその後、それを取り除くために使用することができます。または、最後の2文字を切り落とすことができます(アプリケーションで機能する場合)。

ちなみに、クエリの構文に基づいてSQLServerを使用していると想定しています。

代替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 に答える