首页 > 解决方案 > 操作选择查询的输出

问题描述

我需要从数据库中检索唯一的手机号码。问题是数字没有固定格式,有些开头有 +CountryCode00CountryCode没有+country code

所以我想使用 If 操纵它们以具有单一格式。但我不想更改数据库中的值,我只想在查询本身中更改它。

我不知道该怎么做DISTINCT

这就是我到目前为止所做的

SELECT DISTINCT PhoneNumber
FROM User
where  (len(PhoneNumber) = 13 or len(PhoneNumber) = 10 or phoneNumber like '311%' or phoneNumber like '00311%' )

标签: sqldistinct

解决方案


使用case when. 这是MySQL的解决方案

select distinct case when length(phone) = 10 then concat('00382', right(phone ,(length(phone)-1)))
                     when length(phone) = 13 then replace(phone, '+', '00')
                     when length(phone) = 12 then concat ('00', phone)
                     else phone
                end 
from myTable;     

在这里,我假设您将拥有 10 位长的电话号码,例如:0123456789 我还假设当号码有国家代码时,第一个数字不会显示,例如:00382123456789(14 位长)。

所以假设我已经这样做了:

  • 如果号码长 10 位 (0123456789),则添加国家代码 (00382) 并删除第一位 (0)

  • 如果数字是长 13 位数字,则将 + 替换为 00

  • 如果数字长 12 位,则添加 00

这是演示

这是SQLServer的解决方案:

select distinct case when len(phone) = 10 then concat('00382', right(phone ,(len(phone)-1)))
                     when len(phone) = 13 then replace(phone, '+', '00')
                     when len(phone) = 12 then concat ('00', phone)
                     else phone
                end 
from myTable;    

推荐阅读