如何解决从一列到这些列的串联的最佳联接?
我有一个表TableLHS
和一列ObjInfo
:
ObjInfo
_________
X/132642/A1
X/432753/34
Y/437483/2B
我想加入到TableRHS
中的列,
ObjType ObjNum ObjFlag
_______ _________ _______
X 00132642 A1
X 00432753 34
Y 00437483 2B
因此,此处的联接涉及1)从ObjNumber
中删除前导零,以及2)将TableRHS
中的三列连接在一起。
我最喜欢参加的比赛是:
SELECT ... FROM TableLHS
JOIN TableRHS ON
TableLHS.ObjInfo = TableRHS.ObjType + '/' +
SUBSTRING ( TableRHS.ObjNum,PATINDEX('%[^0]%',TableRHS.ObjNum+'.'),LEN( TableRHS.ObjNum ) ) +
'/' + TableRHS.ObjFlag
我目前的表现可能会有所改善。有解决这个问题的聪明方法吗?
例如有没有更有效的方法来克服ObjNum
中的前导零?反过来工作并尝试在斜杠上拆分ObjInfo
会更快吗?在每一行上执行此操作是否会使索引对ObjNum
的影响无效?
解决方法
一种避免以“ 0”开头的“整数”的方法是将形式转换为整数类型,然后转换回varchar以用于构建联接的路径表达式。
SELECT *
FROM TableLHS t1
INNER JOIN TableRHS t2
ON t1.ObjInfo = t2.ObjType + '/' + CAST(CAST(t2.ObjNum AS INT) AS VARCHAR(12)) +
'/' + t2.ObjFlag;
Demo
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。