需要帮助清理联系号码格式

时间:2014-08-27 13:47:30

标签: sql sql-server

我想清理sql server数据库中的一些联系号码

表名是ronnie_list,列名是“Name Phone#”

数字可以是格式 示例格式是

T: (985)-124-5601
(985)124-5601
985)-124-5601
985.124.5601
9851245601
985124-5601 EX 1432
985-(124)-5601

我想要它们的格式为985-124-5601

请让我知道该怎么做

3 个答案:

答案 0 :(得分:3)

创建一个函数

ALTER FUNCTION dbo.udf_GetNumeric
(@strAlphaNumeric VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
    DECLARE @intAlpha INT
      SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
    BEGIN
      WHILE @intAlpha > 0
        BEGIN
            SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
            SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
        END
    END
    RETURN ISNULL(@strAlphaNumeric,0)
END
GO

测试数据

DECLARE @temp TABLE(string NVARCHAR(1000))
INSERT INTO @temp (string)
VALUES 
('T: (985)-124-5601'),
('(985)124-5601'),
('985)-124-5601'),
('985.124.5601'),
('9851245601'),
('985124-5601 EX 1432'),
('985-(124)-5601')

查询

SELECT LEFT(OnlyNumbers,3) + '-' + SUBSTRING(OnlyNumbers,4,3) + '-' + RIGHT(OnlyNumbers, 4)
FROM (
        SELECT LEFT(dbo.udf_GetNumeric(string), 10) OnlyNumbers
        FROM @temp 
      )z

结果

985-124-5601
985-124-5601
985-124-5601
985-124-5601
985-124-5601
985-124-5601
985-124-5601

答案 1 :(得分:1)

1。 在列周围写下REPLACE(),直到您删除所有不需要的符号。 像这样。 REPLACE(REPLACE([COLUMN],')',''),'(','') --Only Brackets are removed here.

(985)124-5601 becomes 985124-5601
985124-5601 EX 1432 becomes 9851245601  1432

2。 删除符号后,也可以删除空格,您可以使用REPLACE本身

985124-5601 becomes 9851245601
98512456011432 becomes 98512456011432

3。 取LEFT([COLUMN],10)并使用substring将其拆分为3,然后将minus symbol放在其间。

9851245601 becomes 985-124-5601
98512456011432 becomes 985-124-5601

你可以在1个sql脚本中完成所有这些,只需要fyi。 希望它有所帮助..

答案 2 :(得分:1)

我会使用此答案中的代码将字符串简化为数字https://stackoverflow.com/a/18625635/2587452

然后我会用

SELECT 
Phone = CASE WHEN LEN (x)=10 THEN LEFT(x, 3)+'-'+SUBSTRING(x,4,3)+'-'+SUBSTRING(x,7,4)
        ELSE '' END

除非您需要处理这些扩展程序或国家/地区代码,否则这将有效。在这种情况下,您需要添加更多WHEN子句,并且仍然可能存在需要特殊代码的边缘情况。

相关问题