
[英]tsql - joining two tables from different databases hosted on separate servers
[英]TSQL - Joining two numeric fields but with different lengths
抱歉,如果这是一个基本问题,但我无法在google等上找到答案。
我有两个表:Table1,Table2
表1的字段“ ACCOUNTNO”为10个字符的数字字段(例如:1122334455)
表2的字段“ SUBACCNO”是一个12个字符的数字字段(示例:112233445501)
如您所见,SUBACCNO与ACCOUNTNO相同,但末尾有两位数字,范围从01-99。
如果我想加入两个表并且一直在尝试这样的事情:
SELECT *
FROM TABLE1
JOIN TABLE2
ON TABLE1.ACCOUNTNO = TABLE2.SUBACCNO
WHERE STR(SUBACCNO) LIKE '1122334455%%'
由于无法对数字数据执行通配符,因此我尝试将其转换为带有最后两个字符的通配符的字符串。 但是,这什么也不会返回。
有人能提供一些建议吗? 谢谢!
如何将SUBACCNO
列除以100:
SELECT *
FROM TABLE1
JOIN TABLE2
ON TABLE1.ACCOUNTNO = TABLE2.SUBACCNO / 100
实际上,为了安全起见,您可能想使用ROUND()
将商显式地截断到小数点后零位:
SELECT *
FROM TABLE1
JOIN TABLE2
ON ROUND(TABLE1.ACCOUNTNO, 0, 1) = ROUND(TABLE2.SUBACCNO / 100, 0, 1)
您的加入将无效。
试试这个,它是不可替代的..如果您不能更改设计
SELECT *
FROM TABLE1
JOIN TABLE2
ON TABLE1.ACCOUNTNO = cast(substring(TABLE2.SUBACCNO,1,10) as bigint)
您还可以再添加一个如下所示的计算列,并对其进行索引以获得良好的性能,如果您经常使用这些类型的查询,我建议您这样做
create table yourtable
(
accno bigint,
accno1 as cast(substring(accno,1,10) as bigint) persisted
)
现在,您可以在列上方建立索引以取得良好的效果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.