Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何通过一个可能有前缀也可能没有前缀的列连接和分组两个表?_Sql_Sql Server - Fatal编程技术网

Sql 如何通过一个可能有前缀也可能没有前缀的列连接和分组两个表?

Sql 如何通过一个可能有前缀也可能没有前缀的列连接和分组两个表?,sql,sql-server,Sql,Sql Server,我有两张有电话号码的桌子,这些号码的前缀可能是+也可能不是。我得把这两张桌子神奇地连在一起 如果我想避免使用嵌套的select子句在必要时将数据与+连接起来,我的选项是什么 表A有一个电话字段。数字可能有也可能没有+ 表B有一个电话字段。数字可能有也可能没有+ 带+或不带+的数字视为相同 你可以走两条路 更换(电话“+”,“) 如果数字的长度不变- 子串(电话,(-1)*@length) 其中@length为您的号码长度 因此,连接看起来像 A在替换时加入B(A.phone,“+”,“”)=

我有两张有电话号码的桌子,这些号码的前缀可能是+也可能不是。我得把这两张桌子神奇地连在一起

如果我想避免使用嵌套的select子句在必要时将数据与+连接起来,我的选项是什么

  • 表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,'+','')