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



对不起,如果这是一个基本问题,但我无法在Google等上找到答案。

我有两个表:table1,table2

表1具有10个字符数字字段的字段'AccountNo'(示例:1122334455)

表2具有一个" subaccno"字段,它是一个12个字符数字字段(示例:1122233445501)

您可以看到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
)

现在您可以在列上方索引良好的性能

相关内容

  • 没有找到相关文章

最新更新