SQL - 连接两个数字字段但长度不同
TSQL - Joining two numeric fields but with different lengths
抱歉,如果这是一个基本问题,但我无法在 google 等问题上找到答案
我有两个表:Table1,Table2
Table 1 有一个字段 'ACCOUNTNO',它是一个 10 个字符的数字字段(示例:1122334455)
Table 2 有一个字段 'SUBACCNO' 是一个 12 个字符的数字字段(示例:112233445501)
如您所见,SUBACCNO 与 ACCOUNTNO 相同,但末尾多了两位数字,范围为 01-99。
如果我想加入两个表并且一直在尝试这样的事情:
SELECT *
FROM TABLE1
JOIN TABLE2
ON TABLE1.ACCOUNTNO = TABLE2.SUBACCNO
WHERE STR(SUBACCNO) LIKE '1122334455%%'
由于无法对数字数据执行通配符,我尝试将其转换为最后两个字符带有通配符的字符串。不过这个returns没什么。
有没有人可以提供一些建议?谢谢!
如何加入 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)
您的加入将无法工作..
试试这个,它不是 Sargable..如果你不能改变你的设计
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
)
现在您可以为以上列建立索引以获得良好的性能
抱歉,如果这是一个基本问题,但我无法在 google 等问题上找到答案
我有两个表:Table1,Table2
Table 1 有一个字段 'ACCOUNTNO',它是一个 10 个字符的数字字段(示例:1122334455)
Table 2 有一个字段 'SUBACCNO' 是一个 12 个字符的数字字段(示例:112233445501)
如您所见,SUBACCNO 与 ACCOUNTNO 相同,但末尾多了两位数字,范围为 01-99。
如果我想加入两个表并且一直在尝试这样的事情:
SELECT *
FROM TABLE1
JOIN TABLE2
ON TABLE1.ACCOUNTNO = TABLE2.SUBACCNO
WHERE STR(SUBACCNO) LIKE '1122334455%%'
由于无法对数字数据执行通配符,我尝试将其转换为最后两个字符带有通配符的字符串。不过这个returns没什么。
有没有人可以提供一些建议?谢谢!
如何加入 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)
您的加入将无法工作..
试试这个,它不是 Sargable..如果你不能改变你的设计
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
)
现在您可以为以上列建立索引以获得良好的性能