很抱歉,如果这是一个基本问题,但我一直无法在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。然而,这没有任何回报。
有人能提供一些建议吗?谢谢!
答案 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
)
现在,您可以在列上方建立索引,以获得良好的性能