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

时间:2016-06-28 10:42:51

标签: tsql join numeric variable-length

很抱歉,如果这是一个基本问题,但我一直无法在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%%'

由于无法对数字数据执行通配符,我尝试将其转换为带有最后两个字符的通配符的String。然而,这没有任何回报。

有人能提供一些建议吗?谢谢!

2 个答案:

答案 0 :(得分:3)

如何加入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)

答案 1 :(得分:0)

你的联合不会工作..

试试这个,如果你不能改变你的设计,那就不可能了。

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
)

现在,您可以在列上方建立索引,以获得良好的性能