1

2つの異なるデータベースのアカウント番号を比較して、アカウントが両方に存在することを確認しています。一方のデータベースのアカウントフィールドはnvarcharで、もう一方のデータベースはvarcharです。私はキャストを行って両方をキャストし、varchar(12)それらに参加して一致するものがない場所を確認します。12文字未満のアカウント番号がある場合は、一致していないと見なされます。各フィールドの余分な文字が問題の原因であると思いますか?

table1 - accountnumber(nvarchar(255))
table2 - accountnumber(varchar(20))

select * from
table1
left outer join table2 on table2.accountnumber = table1.accountnumber

この1つの例では、両方のテーブルに番号12345678のアカウントがありますが、結合は機能していません。データ型の不一致なのか、空白なのか、それとも他の何かなのかわかりません。

--追加--table2のデータは、実際にはvarchar2(12バイト)として格納されているOracleデータベースからのものであることを追加する必要があります。それをSQLServerデータベースにインポートし、varchar(20)として保存します。これが違いを生むかどうかはわかりません。

4

3 に答える 3

1

クエリは正常に機能します。これはおそらく文字エンコードの問題です。を使用してみてくださいcollate役立つかもしれないこの前のSOの答えを参照してください。

于 2013-02-01T13:57:13.280 に答える
1

どこに問題があるのか​​わからない。このクエリは、一致するアカウント番号を返す必要があります (キャストする必要はありません)。

SELECT *
FROM YourTable 
   JOIN YourOtherTable ON YourTable.AccountNumber = YourOtherTable.AccountNumber

データにスペースが含まれている場合は、RDBMS に応じてデータを TRIM できます (SQL Server の場合は LTRIM および RTRIM)。

SELECT *
FROM YourTable 
   JOIN YourOtherTable ON RTRIM(LTRIM(YourTable.AccountNumber)) = RTRIM(LTRIM(YourOtherTable.AccountNumber))

これがSQL Fiddleです。

幸運を。

于 2013-02-01T13:43:01.140 に答える