Sql 如何通过一个可能有前缀也可能没有前缀的列连接和分组两个表?
我有两张有电话号码的桌子,这些号码的前缀可能是+也可能不是。我得把这两张桌子神奇地连在一起 如果我想避免使用嵌套的select子句在必要时将数据与+连接起来,我的选项是什么Sql 如何通过一个可能有前缀也可能没有前缀的列连接和分组两个表?,sql,sql-server,Sql,Sql Server,我有两张有电话号码的桌子,这些号码的前缀可能是+也可能不是。我得把这两张桌子神奇地连在一起 如果我想避免使用嵌套的select子句在必要时将数据与+连接起来,我的选项是什么 表A有一个电话字段。数字可能有也可能没有+ 表B有一个电话字段。数字可能有也可能没有+ 带+或不带+的数字视为相同 你可以走两条路 更换(电话“+”,“) 如果数字的长度不变- 子串(电话,(-1)*@length) 其中@length为您的号码长度 因此,连接看起来像 A在替换时加入B(A.phone,“+”,“”)=
- 表A有一个电话字段。数字可能有也可能没有+
- 表B有一个电话字段。数字可能有也可能没有+
- 带+或不带+的数字视为相同
更换(电话“+”,“)
- 如果数字的长度不变-
子串(电话,(-1)*@length)
其中
为您的号码长度@length
因此,连接看起来像
- 你可以走两条路
A在替换时加入B(A.phone,“+”,“”)=替换(B.phone,“+”,“”)
或
<代码>子串上的连接B(Apple,@ Stand)=子串(B.Poice,@长度)< /C> < /P>,您可以将PosieSo编号列分成两个:前缀和数字吗?如果没有,那么在连接两个表时,只需使用REPLACE函数并用空字符串替换
+
。不是最好的选择,但是如果它们是一个没有很多行的小表,那么它将执行这个任务。string@elite5472我的回答有帮助?我可以把它放在连接子句中?当然可以,为什么不呢?请记住,这将导致此列上的任何索引无效,并降低查询性能。但是,有时这是你必须做的。你可以对任何谓词进行JOIN
,从简单的如X=Y到复杂的如REPLACE(X.phone,'+','')=REPLACE(Y.phone,'+','')