繁体   English   中英

TSQL-连接两个数字字段但长度不同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM