Search

2015년 12월 23일 수요일

[Database] [MSSQL] 문자와 숫자가 혼용된 컬럼에서 숫자만 뽑아 INDEX 걸기.

* 회원의 전화번호와 같이 숫자만 뽑아서 인덱스를 걸어야 하는 컬럼들이 있다.
* 예를 들어, 아래와 같은 고객 테이블을 기존에 쓰고 있다고 생각해보자.
* 여기에서 왜 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);



댓글 없음:

댓글 쓰기