我的数据存储在手机号码中
我想按数据库中的number
列进行分组。
例如,某些数字可能会显示44123456789
和0123456789
,但这些数字相同。我如何将这些组合在一起?
答案 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具有相同的标准化数字。