>>김상기 님께서 쓰시길<<
:: 이 이야기를 하기 전에 먼저 numeric 자료형에 대한 이야기를
:: 간단히 언급해야할 것같습니다.
:: 이 놈은 문자열과 숫자형이 교묘하게 섞여있는 컴차원에서는 문자열이고,
:: 사용자 입장에서는 숫자형인 자료형입니다.
:: 어떻게 저장 되냐면, 전체 name 자료형의 크기(32byte)만큼 할당을 하는데,
:: 25byte는 문자열로 정수 부분 1byte는 점(.) 6byte는 소숫점이하 6자리, 나머지 하나
:: 는 문자열 끝인 null 값이 들어갑니다.
::
:: psql 클라이언트를 사용하신다면, \do 명령으로 연산자의 사용법을
:: 살펴 볼 수 있습니다. 예를 들어 % (나머지 연산) 이놈을 예로 들어보면,
::
:: # \do %
:: 명령을 보면, % 연산자의 인자와 리턴 자료형과 설명을 알 수 있습니다.
:: 실수 % 실수 형의 연산은 사용자입장에서 본다면, float형이 numeric이라는 의사(psud
:: o)자료형으로 형변환을 해야지 가능합니다. (컴 입장에 대한 이야기는 생략하겠습니
:: 다. PostgreSQL의 numeric 자료형은 좀 특수한 케이스인자라)
:: 아무튼 그래서 아래 3번의 경우는
:: 다음과 같은 형태로 처리가 됩니다.
:: 1. 10.0 % 3.0 => float8 /> numeric % float8 /> numeric => numeric
:: 2. 10.0 / 1.000000 => float8 /> numeric / numeric => numeric
::
:: 이 과정으로 처리가 됩니다.
:: 글로 표현되니 좀 이상한데, 아무튼 % 연산자의 float8 으로 처리 되지 못하고,
:: numeric으로 처리 되는 부분은 조금만 더 생각해보시면 쉽게 이해가 가실겝니다.
::
:: 지금까지를 정리하면,
:: 자료형 연산자에 대한 연자 오류나 형변환의 문제가 아니라,
:: 서버 차원의 좀더 깊이있는 이해가 부족한 것인듯 싶습니다.
감사합니다.
numeric 자료형에 대해서는 어떤 의미인지는 알겠습니다.
alter table a add c numeric(50,10);
라고 해 보고 numeric 자료형의 사용처가 상상이 갑니다.(한동안 자주 나오던 스트링을 사용한
무한자료형(?)의 일종이군요. 가변형은 아니지만.)
근데요. 여전히 이해가 가지 않는것이...
상기님 말씀대로 \do %를 해보고 나서
float가 numeric으로 전환된후 계산이 된다는 것을 알게는 되었는데...
왜 유독 % 만이 numeric을 유지한체로 리턴이
되는지는 아직 이해가 가지 않는군요.(제 머리의 한계...)
아마도 말씀하신 '컴 입장'의 문제가 아닌가도 합니다만... 언제 시간이 나시면 그 녀석(?)의 사정도 알려주시면 감사하겠습니다.
인천의 나사 풀린 산호...
|