* 예를 들어, 아래와 같은 고객 테이블을 기존에 쓰고 있다고 생각해보자.
* 여기에서 왜 Telephone 컬럼에 전화번호 이외의 문자들이 들어갔는지는 묻지 말기 바란다.. 아직도 많은 운영계 데이터베이스의 테이블에는 저런 형식으로 저장된 값들이 많다..
Customer_Table
Name | Telephone
A | 010-0000-0000
B | 01011111111(Mother)
C | +82-10-2222-2222
# 1. 숫자만을 저장시키기 위한 새 컬럼(Telephone_Numeric)을 하나 만든다.
ALTER TABLE Customer_Table ADD Telephone_Numeric VARCHAR(20) NULL;
# 2. 숫자만을 추출하는 함수를 하나 만든다.
* 이 블로그에서 이미 작성했던 글을 참조하자 : http://oskardevelopers.blogspot.kr/2015/12/database-mssql_15.html
# 3. Telephone컬럼의 숫자만 뽑아서 새로 만든 컬럼(Telephone_Numeric)에 넣어주자.
UPDATE Customer_Table
SET Telephone_Numeric = dbo.func_getNumeric(Telephone);
# 4. 앞으로 새로운 고객이 등록된다던지, 기존 고객의 전화번호가 변경되는 상황을 고려하여 트리거를 만들어줘야 한다.
CREATE TRIGGER tr_fillOnlyNumTel
ON Customer_Table
AFTER INSERT, UPDATE -- 혹은 FOR INSERT, UPDATE로 써도 무방하다.
AS
BEGIN
UPDATE Customer_Table
SET Telephone_Numeric = dbo.func_getNumeric(Telephone)
WHERE Customer_ID IN (SELECT DISTINCT Name FROM Inserted)
END
# 5. Telephone_Numeric컬럼에 인덱스를 걸어주자. (여기서는 비클러스터형, 단일컬럼 방식의 인덱스를 예로 들었다).
CREATE INDEX Customer_Table_INDEX_01
ON Customer_Table(Telephone_Numeric);
댓글 없음:
댓글 쓰기