0

我有一个名为messages的表,其中有一个字段名称mobile numbers。数字采用以下格式:

12345678+9112345678 .. 所以它们都是一样的.. 唯一的区别是在一个数字中缺少国家代码。

所以我在数据库中查询

select the **distinct** numbers from messages tables..

现在它将这两个数字视为不同的..但我想要将这两个数字视为一个。
我怎样才能做到这一点?在我的数据库中,有几个带有不同国家代码的数字。有些有国家代码,有些没有,但我想两者兼而有之。一个在国家代码中,另一个没有代码。怎么做到呢?

4

1 回答 1

2

如果它是一个应该“实时”完成的查询,那么您的表格内容将不会是理想的(阅读:糟糕的性能)

也就是说,如果您知道所有国家/地区代码及其本地前缀(例如,瑞典的本地号码类似于092066666将国家/地区前缀0删除为+4692066666.

CREATE TABLE country_codes (
  id INT,
  code VARCHAR(5),
  local_prefix VARCHAR(5)
);

INSERT INTO country_codes VALUES
(1, '+46', '0'),
(2, '+91', '');

...然后您可以进行如下查询;

SELECT COUNT(DISTINCT 
  CASE WHEN SUBSTR(number,1,1) = '+' 
       THEN REPLACE(number, 
                    (SELECT code 
                     FROM country_codes
                     WHERE SUBSTR(number, 1, LENGTH(code)) = code), 
                    (SELECT local_prefix 
                     FROM country_codes
                     WHERE SUBSTR(number, 1, LENGTH(code)) = code))
       ELSE number
       END) "distinct numbers"
FROM numbers;

一个用于测试的 SQLfiddle

于 2013-07-05T09:45:52.690 回答