2017-03-09 16 views
3

したがって、一致するフィールドに基づいて2つのテーブルを結合しようとしていますが、エントリの一部にスペースまたはタブとして空白が含まれています。しかし、トリムされたフィールドで結合を実行すると、機能しません。これらの例はいずれも、仕事:トリミングされた文字列でWHEREステートメントまたはJOIN ONを実行する

Select * FROM dbo.table 
WHERE replace(LTRIM(RTRIM(**DOCUMENT_ID**)), char(9), '') = 'AB10001' 

そして:サブ選択内部

Select * FROM dbo.table T1 
join dbo.table2 T2 
ON replace(LTRIM(RTRIM(**T1.DOCUMENT_ID**)), char(9), '') 
= replace(LTRIM(RTRIM(**T2.DOCUMENT_ID**)), char(9), '') 

これを回避するには、私も試してみたラッピングを。

これらの条件はこれまでにない。私はSQLがどのようにクエリをコンパイルするかについて何か不明です。技術的な問題があるため、Trimmed値で更新することはできません。

何か助けてください!ありがとう!

+0

データと予想される結果を追加してください。 –

+0

'WHERE column LIKE '%AB10001%''を試しましたか? – Squirrel

+0

もちろん、それは動作しますが、私が書いている実際のクエリにとってより重要な結合では機能しません。トリムされた文字列のSQLサブ選択が機能しないために、なぜ私が結合を修正できるのかがもっと不思議です。 ありがとうございます! – iontom

答えて

0

したがって、決定的な回答はありません。サブクエリではなく、クエリの一部をリファクタリングして終了しました。

この問題は、クエリプロセッサの仕組みに関するいくつかのメカニズムに起因すると考えられます。デバッグは私が今までにやりたいことを超えているようです。

Jereon Mostertは、可能なすべての隠し文字を表示するためにCONVERT(VARBINARY(MAX)、DOCUMENT_ID)を使用することを推奨しました。私はすべての空白文字を置き換えるだけで終わりました。

REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(T.DocNumFormatted)), CHAR(10), ''), CHAR(13), ''), CHAR(9), '') 

私は恐らくそれを扱うためのより洗練された正規表現方法があると思いますが。

とにかく - SQLビューを使用しているようです。奇妙なもの。

関連する問題