【问题标题】:How can I join and group two tables by a column that may or may not have a known prefix?如何按可能有也可能没有已知前缀的列连接和分组两个表?
【发布时间】:2014-02-26 13:54:11
【问题描述】:

我有两个带有电话号码的表格,这些号码上可能有也可能没有 + 前缀。我必须神奇地加入这两个表!

如果我想避免使用嵌套的 select 子句在必要时用 + 连接数据,我有哪些选择?

  • 表 A 有一个电话字段。数字可能有也可能没有 +。
  • 表 B 有一个电话字段。数字可能有也可能没有 +。
  • 带或不带 + 的数字被认为是相同的。

【问题讨论】:

  • 您能否将 PHONE_NUMBER 列分成两列:PREFIX 和 NUMBER?
  • + 符号不会出现在字符串的中间,还是吗?如果它没有,那么只需使用 REPLACE 函数并在连接两个表时将+替换为空字符串''。不是最好的选择,但如果它们是行数不多的小桌子,它就可以完成这项工作。
  • @M.Ali 即使+ 符号在字符串中间也可以工作
  • @elite5472 我的回答有帮助吗?

标签: sql sql-server


【解决方案1】:

你可以走两条路

  1. REPLACE
    REPLACE(phone,'+','')

  2. 如果数字的长度不变 - SUBSTRING
    SUBSTRING(phone, (-1)*@length)

    其中@length在你的号码长度中

所以,连接看起来像
A JOIN B ON REPLACE(A.phone,'+','') = REPLACE(B.phone,'+','')

A JOIN B ON SUBSTRING(A.phone, @length) = SUBSTRING(B.phone, @length)

【讨论】:

  • 我可以把它放在一个连接子句中吗?
  • 当然可以,为什么不呢?
  • 请记住,这将使该列上的任何索引无效并降低查询性能。但是,有时这是你必须要做的。
  • 您可以在任何谓词上使用JOIN,从简单的 X = Y 到复杂的 REPLACE(X.phone, '+', '') = REPLACE(Y.phone, '+', '')
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多