2013-03-18 74 views
2

我想仅选择由电话号码填充的列条目列表中的区号。这是我有:从电话号码条目中选择区号

SELECT LEFT(phone, 3) AS areacode, COUNT(phone) AS count 
FROM registration 
GROUP BY areacode; 

问题是,条目不一致。所以有些电话号码开始时为+ 123-456-7899,其他开始时为(123)-456-7899,另一些开始时没有符号。

所以我的问题是:有没有一种方法可以确保SELECT LEFT从第一个整数开始?

谢谢!

+0

什么号码? 1-123-456-7890? – 2013-03-18 18:48:03

+0

substring(phone,2,3)AS areacode ?? – Hackerman 2013-03-18 18:49:14

回答

2

有一些SQL只是不适合。这是一。我会选择一个字符串的电话号码,并在您选择的编程语言做一些模式匹配来找到区号。

- 或 -

更改您的表,使区号是不同的列。

+0

所以最好的答案是它不能完成?这还算公平。谢谢您的回答;你的建议也很好。 – nv39 2013-03-18 19:06:59

+0

它可以完成,但这不是SQL的意思。使用诸如java或php之类的编程语言将会有所斩获。 – 2013-03-19 11:46:51

1

两个选项(均未存在SQL):

  1. 选择所有的电话号码,并使用您所选择的编程语言来编程去掉了不必要的字符。
  2. 清洁的输入,去掉所有不必要的字符之前将它们插入到数据库

SQL是不是要做到这一点的最好办法,相反,SQL +编程

+0

谢谢@Evan的好建议。皮特贝尔回答了更快,所以我投他最好的答案。无论如何,我很感激 – nv39 2013-03-18 19:07:56

0

有实际上是一个在SQL中这样做是专门为此目的而设计的。

SELECT SUBSTRING(office_phone_number,1,3)FROM contact;

当然,这取决于数字如何存储在表中。如果括号存在,您的起始位置将关闭。

下面是详细信息:国际拨号代码 MySQL substring function