전 시간까지 각 데이타 유형별로 해당하는 function 사용법을 주제로 다뤘는데, 이번에는 데이터 유형을 변환하는 function에 대해 내용을 다뤄보겠습니다. 데이터 유형변환이라면 문자에서 숫자, 숫자에서 문자로 변화하는 것이 가장 일반적이고, 숫자 유형도 여러가지 있는데 그 유형별로 변화하는 방법이 있습니다. 날짜도 변환이라면 변환이겠지만 이전 주제의 날짜 function 에 이미 다 소개되어서 날짜 데이터는 #7을 참조하시길 바랍니다. 날짜는 딴게 없어요, 문자를 날짜로 혹은 날짜를 문자로, 그게 거의 대부분입니다.

 

 

▶ CAST()

 

  데이터 타입을 바꿔주는 대표적인 function 입니다. 이자는 하나인듯 2개입니다. 보통은 인자들이 콤마(,)로 분리되기 때문에 몇개인지 명확히 말할 수 있는데 이 cast()는 데이터와 변환할 유형을 지정하는데 콤마(,)가 아닌 'AS' 가 중간에 들어갑니다. 사용방법을 간단한 예제를 보면서 익혀봅시다.

'2' 는 분명히 문자형 데이터입니다. 이것을 unsigned 형태로 바꾸게 되는데, 이 unsigned는 숫자형 데이터 유형 중, 부호를 없는 데이터만 쓸때 사용하는 형태입니다. 결과는 3이 나오는 것을 보니까 문자 '2'가 숫자로 변형이 된 것을 확인 할 수 있습니다.

 

그런데, 음수값을 unsigned로 바꾸면 이상한 값이 나오게 됩니다.

 

이 때는 signed 라는 부호를 관리하는 데이터로 사용해야 합니다. 

 

  같은 숫자 데이터 유형이라도 unsigned 는 부호를 관리하지 않기 때문에 표시할 수 있는 데이터가 signed의 2배입니다. 예를 들어, int는 -21억 ~ 21억 정도의 숫자를 표현할 수 있습니다. 이것을 unsigned로 표현한다면 2배인 42억까지 표시가 됩니다. 그런데 이렇게 아슬아슬하게 만들어 놓으면 문제가 생깁니다. 아니 문제가 안생기더라도 약간이나마 걱정이 생기게 됩니다. 그래서 현실에서 사용되는 정수는 bigint 하나로 끝입니다. 그럼 숫자의 범위는 잊으셔도 됩니다. 관리 가능 범위가 -9223372036854775808 ~ 9223372036854775807 인데 아주 특수목적이 아닌 이상 문제없습니다. 그런데 소숫점이하를 관리하고 싶다면 #4에서는 decimal을 써라고 말씀 드렸습니다. 이 부분을 한번더 짚고 가죠.

 

  소수점 관리 데이터 유형은 부동소수점과 고정소수점 형태 2가지로 구분을 합니다. 제가 써라는 decimal은 고정소수점형태입니다. 관리할 데이터의 정수부, 소수점부를 정확하게 지정하고 그 범위만 관리하는 겁니다. 부동소수점은 아래와 같이 범위 데이터가 제한 적입니다. Float과 real 이라는 형태를 보면 정수, 소수점 모두 포함해서 표현되는 자리수가 제한 된다는 점을 알 수 있습니다. float은 소수점을 제외하고 총 6자리를 표현할 수가 있고 real은 그것보다 많습니다. 근데 오버하게 되면 공학용 숫자로 표시되는 것을 볼 수 있습니다.

  위에서 봤듯이 단순한 용도 예를 들어 100점 만점 과목들의 평균을 구한다거나 할 때라면 float을 사용해도 무방하다고 볼 수 있지만 부동소수점 데이터는 엄밀히 말하면 정확한 값이 아닌 근사값입니다. 실제 좀 복잢한 계산을 하게되면 소수점 끝자리가 계산할 때마다 다르게 나오는 경우가 있습니다. 그래서 저는 부동소수점을 거의 사용하지 않습니다. 고정소수점 형식은 데이터를 정확하게 관리합니다. 부동소수점 분야가 필요한 곳이 있겠지만 저는 정확한 데이터만 원한는 범위까지 관리하는 목적이기 때문에 소수점 데이터는 decimal 하나만 사용하게 된 것입니다.

 

 

  음 그런데, 굳이 cast()를 안써도 연산이 될 수 도 있다는 것을 알 수 있습니다. MySQL 버젼이 높아지면서 되는 것인지 잘 모르겠는데, 되더라도 잠시 확인하는 용도로는 상관 없겠지만 프로그램에 이렇게 사용하는 것은 피해주세요.

 

  이제 날짜로 변환하기위해 cast()를 사용하는 방법을 보시지요. 날짜, 날짜시간, 시간 형식으로 변환할 수 있습니다. 참고로 as timestamp는 안되는군요. 그리고, 변환할 문자형식의 포맷을 지정하고 싶다면 str_to_date 함수를 지정할 수 있습니다. 이렇게 되면 cast() 보다 더 다양한 방식으로 날짜 데이터 유형으로 변환 할 수 있습니다. 다양한 방식이란 첫번째 인자 날짜형식을 마음데로 뒤죽박죽 넣어도 어떤 형식으로 받아들이면 되는지 format 값을 넣으면 알아서 인식한다는 것입니다.

 

  Cast()를 이용한 데이터 변환 방법도 알아봤습니다. 마무리 하기 전에 간단한 내용을 하나만 더 추가하겠습니다. 데이터 타입을 변경하는 것이 아닌 간단한 데이터 자체의 변경도 있을 수 있습니다. 이 내용만 간단하게 소개하고 교육을 마치겠습니다. 

 

 

▶ COALESCE()

NULL 값을 다른 값으로 대체. 혹은 여러개 항목 중에 왼쪽부터 시작해서 첫번째가 NULL값이 아닌 값을 구할 때 사용합니다. 처음 코딩 교육을 배우시는 입장에서는 이 NULL 의 개념이 있으실지 잘 모르겠군요. NULL 은 데이터가 없다라고 하기도 하고, 데이터 타입을 소개하면서 Oracle DB 를 언급하면 잠시 말씀 드렸던 varchar2 타입과 마찬가지로 길이가 0인 문자열을 의미하기도 합니다. 이런 NULL 값은 데이터를 다룰 때 꽤 성가십니다. 그래서 NULL 인 경우에는 다른 값으로 치환하는 것이 보통입니다. 그 때 사용되는 것이 이 coalesce() 입니다.

 

 

  이것으로 데이터 변환 function에 대한 설명을 마치도록 하겠습니다. 분명 말씀 드리지만 데이터 변환방법은 이거보다 훨씬더 많이 존재할 것입니다. 자신에게 잘 맞는 것을 쓴 것도 중요하겠지만 코드를 봤을 때 누구나 쉽게 알 수 있는 몇가지로 개발을 쉽게 할 수 있다면 저는 그것이 최고라고 생각합니다. 수고하셨습니다.

+ Recent posts