K****n 发帖数: 2485 | 1 遇到这样一个问题,需要编一段SQL指令,在任意给定的电话号码(包括国家代码,为
一整串数字,没有任何分隔符号)中识别出它的国家代码。所有已知国家代码在一个表
格中已经给出。
原题目如下,计算费率的部分已经解决,但如何确定国家代码的部分很头痛。貌似主要
难点在于无法区别代表美国的“1”与代表多米尼加的“1809”这样非常近似的区号。
其他区号的比较可能用LIKE %语句就能实现吧。
请SQL大拿们指点一下,多谢! :)
There are two tables in a telecom SQL Server database – Customers and Rates
as shown below:
Customers
PK CustomerPhoneNumber varchar(15)
CustomerType int -the type of customer
Rates
FK CustomerType int - the type of customer
Count |
l******n 发帖数: 9344 | 2 look at the length first
Rates
【在 K****n 的大作中提到】 : 遇到这样一个问题,需要编一段SQL指令,在任意给定的电话号码(包括国家代码,为 : 一整串数字,没有任何分隔符号)中识别出它的国家代码。所有已知国家代码在一个表 : 格中已经给出。 : 原题目如下,计算费率的部分已经解决,但如何确定国家代码的部分很头痛。貌似主要 : 难点在于无法区别代表美国的“1”与代表多米尼加的“1809”这样非常近似的区号。 : 其他区号的比较可能用LIKE %语句就能实现吧。 : 请SQL大拿们指点一下,多谢! :) : There are two tables in a telecom SQL Server database – Customers and Rates : as shown below: : Customers
|
p********0 发帖数: 186 | |
K****n 发帖数: 2485 | 4 我感觉主要难点是如何区分下面两个号码
1809222333 多米尼加号码1809+222333
1809222333 美国号码 1+809.222.333
【在 l******n 的大作中提到】 : look at the length first : : Rates
|
b*******3 发帖数: 1461 | |
a********y 发帖数: 687 | 6 As I know, u need a T-SQL function, and call this function from SQL
statement.
reading this is helpful to construct the T-SQL function.
http://www.unc.edu/~rowlett/units/codes/country.htm
Rates
【在 K****n 的大作中提到】 : 遇到这样一个问题,需要编一段SQL指令,在任意给定的电话号码(包括国家代码,为 : 一整串数字,没有任何分隔符号)中识别出它的国家代码。所有已知国家代码在一个表 : 格中已经给出。 : 原题目如下,计算费率的部分已经解决,但如何确定国家代码的部分很头痛。貌似主要 : 难点在于无法区别代表美国的“1”与代表多米尼加的“1809”这样非常近似的区号。 : 其他区号的比较可能用LIKE %语句就能实现吧。 : 请SQL大拿们指点一下,多谢! :) : There are two tables in a telecom SQL Server database – Customers and Rates : as shown below: : Customers
|
K****n 发帖数: 2485 | |
K****n 发帖数: 2485 | 8 美国local的电话号码不会有809开头的么?
那如果其他国家的国家代号也是1开头的,比如说1626,怎样用SQL把它与美国的电话号
码区分开? |
b*******3 发帖数: 1461 | 9 regex to get you started
【在 K****n 的大作中提到】 : 抱歉,看不懂这是啥。。。
|
J******6 发帖数: 1401 | 10 如此说来,考的不是SQL, 而是国际电话号码标准了。
, |
J******6 发帖数: 1401 | 11 just search from google, no 809 area code in US, all 1+ area codes are unique.
即 809 专留给Dominican
http://www.convertit.com/Go/ConvertIt/Reference/Telephone_Area_Codes.ASP |
b******7 发帖数: 123 | 12 这个是权威答案,号码设计避免了这种情况,因为以前的交换机是继电器的,拔一个号
就跳一个,必须避免重
号情况。
, |
K****n 发帖数: 2485 | 13 是的,看来你们的说法正确,ITU的国家区号表中没有能跟美国local区号重叠、冲突的
内容
那这题目就应该容易多了 :)
多谢你们的解答!
【在 b******7 的大作中提到】 : 这个是权威答案,号码设计避免了这种情况,因为以前的交换机是继电器的,拔一个号 : 就跳一个,必须避免重 : 号情况。 : : ,
|
a********y 发帖数: 687 | 14 While I was walking my dog, I suddenly figured out a simple solution.
First you need build up a look up table, referring to
http://www.unc.edu/~rowlett/units/codes/country.htm
Table name: ITUCalling_CountryCode
ITUCallingNum varchar(3) - primary key
CountryCode varchar(4)
To map from ITUCallingNum to Country code.
Because country calling codes for international telephone calls are either 1
, 2, or 3 digits and unique, the pseudo code can be implemented as
Select CountryCode
from ITUCallin
【在 K****n 的大作中提到】 : 遇到这样一个问题,需要编一段SQL指令,在任意给定的电话号码(包括国家代码,为 : 一整串数字,没有任何分隔符号)中识别出它的国家代码。所有已知国家代码在一个表 : 格中已经给出。 : 原题目如下,计算费率的部分已经解决,但如何确定国家代码的部分很头痛。貌似主要 : 难点在于无法区别代表美国的“1”与代表多米尼加的“1809”这样非常近似的区号。 : 其他区号的比较可能用LIKE %语句就能实现吧。 : 请SQL大拿们指点一下,多谢! :) : There are two tables in a telecom SQL Server database – Customers and Rates : as shown below: : Customers
|