我想清理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
请让我知道该怎么做
答案 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子句,并且仍然可能存在需要特殊代码的边缘情况。