SQL按编号分组并替换字符

时间:2015-08-04 08:46:48

标签: sql

我的数据存储在手机号码中 我想按数据库中的number列进行分组。

例如,某些数字可能会显示441234567890123456789,但这些数字相同。我如何将这些组合在一起?

2 个答案:

答案 0 :(得分:2)

SELECT DIGITS(column_name) FROM table_name

您应该在DB中使用此格式,然后为其分配任何变量,接下来您可以将其数字与其他变量匹配。

答案 1 :(得分:0)

不确定它真的适合你,但你可以构建这种子查询:

SELECT ta.`phone_nbr`,
COALESCE(list.`normalized_nbr`,ta.`phone_nbr`) AS nbr
FROM (
  SELECT 
    t.`phone_nbr`,
    SUBSTRING(t.`phone_nbr`,2) AS normalized_nbr
  FROM `your_table` t
    WHERE LEFT(t.`phone_nbr`,1) = '0'
  UNION
  SELECT
    t.`phone_nbr`,
    sub.`filter_nbr` AS normalized_nbr
   FROM `your_table` t,
   ( SELECT 
       SUBSTRING(t2.`phone_nbr`,2) AS filter_nbr
     FROM `your_table` t2
      WHERE LEFT(t2.`phone_nbr`,1) = '0') sub
  WHERE LEFT(t.`phone_nbr`,1) != '0' 
    AND t.`phone_nbr` LIKE CONCAT('%',sub.`filter_nbr`)
) list
LEFT OUTER JOIN `your_table` ta
ON ta.`phone_nbr` = list.`phone_nbr`

它将返回一个带有“标准化”号码的电话号码列表,即如果存在重复匹配则删除0或国际前缀,否则返回原始号码。

然后,您可以在GROUP BY字段上使用nbr子句,并在phone_nbr上加入其余查询。

它有一些限制,因为不幸的是它可能会对类似的剥离数字进行分组。不幸的是,+ 49123456789,+ 44123456789和0123456789具有相同的标准化数字。