1

我正在比较两个不同数据库中的帐号,以确保两个数据库中都存在该帐户。一个数据库中的帐户字段是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

在这个示例中,两个表都有一个编号为 12345678 的帐户,但连接不起作用。我不确定是数据类型不匹配还是空格或其他原因。

--已添加-- 我应该补充一点,table2 中的数据实际上源自一个 Oracle 数据库,它以 varchar2(12 字节)的形式存储。我将它导入到 SQL Server 数据库中,并在其中存储为 varchar(20)。我不确定这是否有所作为。

4

3 回答 3

1

不确定您在哪里遇到问题。此查询应返回匹配的帐号(无需 CAST):

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

如果您的数据有空格,您可以根据您的 RDBMS 修剪您的数据 - SQL Server 的 LTRIM 和 RTRIM。

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

这是SQL 小提琴

祝你好运。

于 2013-02-01T13:43:01.140 回答
1

您的查询工作正常。这可能是字符编码问题。尝试使用collate. 请参阅以前的 SO 答案,这可能会有所帮助。

于 2013-02-01T13:57:13.280 回答
0

我遇到了完全相同的情况,我什至有两个同级查询(一个创建为另一个的副本),它们都有这个问题。排序规则和类型在这里没有问题。

最后经过大量测试,其中一个查询开始工作而没有明显的变化,只是重新编写。当我重新输入第二个查询的 IN 部分时,它也开始工作了。因此,在查询的某处意外键入了隐藏字符时出现了问题。

于 2017-10-25T11:22:02.463 回答