[SQL] SQL에서 전화 번호와 같은 숫자 열을 포맷하는 방법
SQLSQL에서 전화 번호와 같은 숫자 열을 포맷하는 방법
나는 전화 번호 열이 데이터베이스에 테이블이 있습니다. 숫자는 다음과 같다 :
123456789
나는 다음과 같이 해당 서식을 지정할 :
123-456-789
해결법
-
==============================
1.이것은을 수행해야합니다
이것은을 수행해야합니다
UPDATE TheTable SET PhoneNumber = SUBSTRING(PhoneNumber, 1, 3) + '-' + SUBSTRING(PhoneNumber, 4, 3) + '-' + SUBSTRING(PhoneNumber, 7, 4)
통합 케인의 제안, 당신은 런타임에 전화 번호의 서식을 계산할 수 있습니다. 한 가지 가능한 방법은이 목적 (SQL Server의 작동)에 대한 스칼라 함수를 사용하는 것입니다 :
CREATE FUNCTION FormatPhoneNumber(@phoneNumber VARCHAR(10)) RETURNS VARCHAR(12) BEGIN RETURN SUBSTRING(@phoneNumber, 1, 3) + '-' + SUBSTRING(@phoneNumber, 4, 3) + '-' + SUBSTRING(@phoneNumber, 7, 4) END
-
==============================
2.나는 일반적으로 당신이 프런트 엔드 코드까지 서식 및 SQL에서 그대로 단지 데이터를 반환 떠날 것을 권 해드립니다. 그러나 SQL에서 그것을 할, 당신이 그것을 포맷하는 사용자 정의 함수를 만들 것을 권 해드립니다. 이 같은:
나는 일반적으로 당신이 프런트 엔드 코드까지 서식 및 SQL에서 그대로 단지 데이터를 반환 떠날 것을 권 해드립니다. 그러나 SQL에서 그것을 할, 당신이 그것을 포맷하는 사용자 정의 함수를 만들 것을 권 해드립니다. 이 같은:
CREATE FUNCTION [dbo].[fnFormatPhoneNumber](@PhoneNo VARCHAR(20)) RETURNS VARCHAR(25) AS BEGIN DECLARE @Formatted VARCHAR(25) IF (LEN(@PhoneNo) <> 10) SET @Formatted = @PhoneNo ELSE SET @Formatted = LEFT(@PhoneNo, 3) + '-' + SUBSTRING(@PhoneNo, 4, 3) + '-' + SUBSTRING(@PhoneNo, 7, 4) RETURN @Formatted END GO
어떤 당신은 다음과 같이 사용할 수 있습니다 :
SELECT [dbo].[fnFormatPhoneNumber](PhoneNumber) AS PhoneNumber FROM SomeTable
또한, 저장된 전화 번호가 숫자의 예상 번호가 길지 않은 경우에 안전 장치를 가지고 빈, 널 (null) 등 - 그것은 오류하지 않습니다.
편집 : 그냥 당신이 당신의 기존 데이터를 업데이트 할에 클럭. 내 대답에서 관련이있는 주요 비트는 당신이 "사기"/ 불완전한 데이터에 대해 보호하기 위해 (즉, 어떤 기존의 일부 값은 5 자 경우) 필요하다
-
==============================
3.언급 한 이상에서, 그 솔루션은 매우 기본적인 데이터베이스 같은 다른 전화 형식이있는 경우 그들은 작동하지 않습니다 :
언급 한 이상에서, 그 솔루션은 매우 기본적인 데이터베이스 같은 다른 전화 형식이있는 경우 그들은 작동하지 않습니다 :
(123)123-4564 123-456-4564 1234567989 etc
여기에 주어진 모든 입력 작업하는 더 복잡한 솔루션입니다 :
CREATE FUNCTION [dbo].[ufn_FormatPhone] (@PhoneNumber VARCHAR(32)) RETURNS VARCHAR(32) AS BEGIN DECLARE @Phone CHAR(32) SET @Phone = @PhoneNumber -- cleanse phone number string WHILE PATINDEX('%[^0-9]%', @PhoneNumber) > 0 SET @PhoneNumber = REPLACE(@PhoneNumber, SUBSTRING(@PhoneNumber, PATINDEX('%[^0-9]%', @PhoneNumber), 1), '') -- skip foreign phones IF ( SUBSTRING(@PhoneNumber, 1, 1) = '1' OR SUBSTRING(@PhoneNumber, 1, 1) = '+' OR SUBSTRING(@PhoneNumber, 1, 1) = '0' ) AND LEN(@PhoneNumber) > 11 RETURN @Phone -- build US standard phone number SET @Phone = @PhoneNumber SET @PhoneNumber = '(' + SUBSTRING(@PhoneNumber, 1, 3) + ') ' + SUBSTRING(@PhoneNumber, 4, 3) + '-' + SUBSTRING(@PhoneNumber, 7, 4) IF LEN(@Phone) - 10 > 1 SET @PhoneNumber = @PhoneNumber + ' X' + SUBSTRING(@Phone, 11, LEN(@Phone) - 10) RETURN @PhoneNumber END
-
==============================
4.나는 출력을 수정하는 경우에만 다음 데이터베이스에 잘못된 데이터를 유지하고하지 않는 것이 좋습니다. 우리는 전화 번호가 여러 가지로 입력 데이터베이스가 :
나는 출력을 수정하는 경우에만 다음 데이터베이스에 잘못된 데이터를 유지하고하지 않는 것이 좋습니다. 우리는 전화 번호가 여러 가지로 입력 데이터베이스가 :
조직의 다른 사람들은 데이터베이스에 다양한 검색 기능과 업데이트를 쓸 수 있습니다, 따라서 그것은 서식 장소 및 검색 규칙 세트에 어렵게 될 것입니다. 그래서 저는 맨 먼저 데이터베이스에있는 데이터를 수정하고 장소 규칙 및 향후이 데이터베이스의 무결성을 보호 형태의 검증에 설정하고있다.
나는 형식을 수정하고 원래의 데이터가 중복 참조 주위를 유지하여 중복 열을 추가 할 제안하지 않는 잘못된 데이터를 유지에 대한 정당성을 볼 수없고, YES 나는 나쁜 데이터로 형식이 잘못된 데이터를 고려한다.
-
==============================
5.솔루션 사용 SUBSTRING과 연결 +는 RDBMS의 거의 독립적이라고. 여기에 SQL 서버에 고유 짧은 솔루션입니다 :
솔루션 사용 SUBSTRING과 연결 +는 RDBMS의 거의 독립적이라고. 여기에 SQL 서버에 고유 짧은 솔루션입니다 :
declare @x int = 123456789 select stuff(stuff(@x, 4, 0, '-'), 8, 0, '-')
-
==============================
6.당신이 시도 할 수 있습니다 :
당신이 시도 할 수 있습니다 :
CREATE function [dbo].[fn_FormatPhone](@Phone varchar(30)) returns varchar(30) As Begin declare @FormattedPhone varchar(30) set @Phone = replace(@Phone, '.', '-') --alot of entries use periods instead of dashes set @FormattedPhone = Case When isNumeric(@Phone) = 1 Then case when len(@Phone) = 10 then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 4, 3)+ '-' +substring(@Phone, 7, 4) when len(@Phone) = 7 then substring(@Phone, 1, 3)+ '-' +substring(@Phone, 4, 4) else @Phone end When @phone like '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' Then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 5, 3)+ '-' +substring(@Phone, 8, 4) When @phone like '[0-9][0-9][0-9] [0-9][0-9][0-9] [0-9][0-9][0-9][0-9]' Then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 5, 3)+ '-' +substring(@Phone, 9, 4) When @phone like '[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' Then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 5, 3)+ '-' +substring(@Phone, 9, 4) Else @Phone End return @FormattedPhone
종료
선택 그것을 사용
(SELECT [dbo].[fn_FormatPhone](f.coffphone)) as 'Phone'
출력 될 것입니다
-
==============================
7.456-7890 형식 - 나는 (123)에 원하는 경우이 작동하는 것을 발견했다.
456-7890 형식 - 나는 (123)에 원하는 경우이 작동하는 것을 발견했다.
UPDATE table SET Phone_number = '(' + SUBSTRING(Phone_number, 1, 3) + ') ' + '- ' + SUBSTRING(Phone_number, 4, 3) + '-' + SUBSTRING(Phone_number, 7, 4)
-
==============================
8.내 목적을 위해 sqiller의 기능 @ 업데이트
내 목적을 위해 sqiller의 기능 @ 업데이트
CREATE FUNCTION [toolbox].[FormatPhoneNumber] ( @PhoneNumber VARCHAR(50), @DefaultIfUnknown VARCHAR(50) ) RETURNS VARCHAR(50) AS BEGIN -- remove any extension IF CHARINDEX('x', @PhoneNumber, 1) > 0 SET @PhoneNumber = SUBSTRING(@PhoneNumber, 1, CHARINDEX('x', @PhoneNumber, 1) - 1) -- cleanse phone number string WHILE PATINDEX('%[^0-9]%',@PhoneNumber) > 0 SET @PhoneNumber = REPLACE(@PhoneNumber, SUBSTRING(@PhoneNumber,PATINDEX('%[^0-9]%',@PhoneNumber),1),'') -- Remove US international code if exists, i.e. 12345678900 IF SUBSTRING(@PhoneNumber,1,1) = '1' AND LEN(@PhoneNumber) = 11 SET @PhoneNumber = SUBSTRING(@PhoneNumber, 2, 10) -- any phone numbers without 10 characters are set to default IF LEN(@PhoneNumber) <> 10 RETURN @DefaultIfUnknown -- build US standard phone number SET @PhoneNumber = '(' + SUBSTRING(@PhoneNumber,1,3) + ') ' + SUBSTRING(@PhoneNumber,4,3) + '-' + SUBSTRING(@PhoneNumber,7,4) RETURN @PhoneNumber END
-
==============================
9.당신이 열이 같은 숫자 구문 인 경우 형식을 사용할 수 있습니다 추천 사용시 FORMAT (값 형식 [문화]) FORMAT (@d, 'D', 'EN-US') 또는 FORMAT (123456789, '### - ## - ####') (하지만 SQL 서버 2012 이후이 작품)
당신이 열이 같은 숫자 구문 인 경우 형식을 사용할 수 있습니다 추천 사용시 FORMAT (값 형식 [문화]) FORMAT (@d, 'D', 'EN-US') 또는 FORMAT (123456789, '### - ## - ####') (하지만 SQL 서버 2012 이후이 작품)
에서 사용처럼 UPDATE TABLE_NAME SET COLUMN_NAME = FORMAT (COLUMN_NAME, '### - ## - ####')
과
당신의 열이 VARCHAR 또는 NVARCHAR 사용하는 경우 다음과 같이 수행 CONCAT (SUBSTRING (핸드폰, 0,4) ', SUBSTRING (핸드폰, 4,3)', SUBSTRING (핸드폰, 7,2) ', SUBSTRING (핸드폰, 9,2))
당신은 항상 도움을 얻을 수 있습니다
-
==============================
10.당신은 출력에 새로운 테이블이나 함수를 만들 필요를 포맷하지하십시오. 이 시나리오에서는 지역 번호는 별도의 필드에 있었다. 내가 필드 1을 사용 FIELD2은 같은 쿼리에 다른 필드를 선택할 수 있습니다 설명합니다 :
당신은 출력에 새로운 테이블이나 함수를 만들 필요를 포맷하지하십시오. 이 시나리오에서는 지역 번호는 별도의 필드에 있었다. 내가 필드 1을 사용 FIELD2은 같은 쿼리에 다른 필드를 선택할 수 있습니다 설명합니다 :
area phone 213 8962102
Select 문 :
Select field1, field2,areacode,phone,SUBSTR(tablename.areacode,1,3) + '-' + SUBSTR(tablename.phone,1,3) + '-' + SUBSTR(tablename.areacode,4,4) as Formatted Phone from tablename
샘플 출력 :
columns: FIELD1, FIELD2, AREA, PHONE, FORMATTED PHONE data: Field1, Field2, 213, 8962102, 213-896-2102
from https://stackoverflow.com/questions/1426487/how-to-format-a-numeric-column-as-phone-number-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가장 안전한 방법은 테이블에서 마지막 레코드 ID를 얻으려면 (0) | 2020.07.05 |
---|---|
[SQL] 어떻게 DATETIME 컬럼에 1 년 추가하는 SQL UPDATE 문을 사용할 수 있습니까? (0) | 2020.07.05 |
[SQL] 연산자와 같은 SQL 숫자 만 얻을 수 (0) | 2020.07.04 |
[SQL] "열은 여기에 허용되지 않습니다"오류 INSERT 문에 (0) | 2020.07.04 |
[SQL] "외래 키"와 "제약 외래 키"의 차이 (0) | 2020.07.04 |