database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 2744 게시물 읽기
No. 2744
Re: 연산자 이야기
작성자
김상기
작성일
2001-05-15 11:05
조회수
4,636

이 이야기를 하기 전에 먼저 numeric 자료형에 대한 이야기를

간단히 언급해야할 것같습니다.

이 놈은 문자열과 숫자형이 교묘하게 섞여있는 컴차원에서는 문자열이고,

사용자 입장에서는 숫자형인 자료형입니다.

어떻게 저장 되냐면, 전체 name 자료형의 크기(32byte)만큼 할당을 하는데,

25byte는 문자열로 정수 부분 1byte는 점(.) 6byte는 소숫점이하 6자리, 나머지 하나는 문자열 끝인 null 값이 들어갑니다.

 

psql 클라이언트를 사용하신다면, \do 명령으로 연산자의 사용법을

살펴 볼 수 있습니다. 예를 들어 % (나머지 연산) 이놈을 예로 들어보면,

 

# \do %

명령을 보면, % 연산자의 인자와 리턴 자료형과 설명을 알 수 있습니다.

실수 % 실수 형의 연산은 사용자입장에서 본다면, float형이 numeric이라는 의사(psudo)자료형으로 형변환을 해야지 가능합니다. (컴 입장에 대한 이야기는 생략하겠습니다. PostgreSQL의 numeric 자료형은 좀 특수한 케이스인자라)

아무튼 그래서 아래 3번의 경우는

다음과 같은 형태로 처리가 됩니다.

1. 10.0 % 3.0 => float8 /> numeric % float8 /> numeric => numeric

2. 10.0 / 1.000000 => float8 /> numeric / numeric => numeric

 

이 과정으로 처리가 됩니다.

글로 표현되니 좀 이상한데, 아무튼 % 연산자의 float8 으로 처리 되지 못하고,

numeric으로 처리 되는 부분은 조금만 더 생각해보시면 쉽게 이해가 가실겝니다.

 

지금까지를 정리하면,

자료형 연산자에 대한 연자 오류나 형변환의 문제가 아니라,

서버 차원의 좀더 깊이있는 이해가 부족한 것인듯 싶습니다.

 

 

 

>>신현호 님께서 쓰시길<<

 

:: 김일형 님과 김상기 님의 조언으로 몇가지는 해결되었습니다.

::

:: 1. 정수 대 정수 연산에서 소수점 밑의 버림

:: 나누셈의 경우가 되겠는데... 나름대로 이해가

:: 갑니다.

:: 2. 3번째 문제와 같이 시험하면서 이상하게 꼬인

:: 거였습니다. 제 실수입니다.(죄송)

:: 3. 나머지 연산자인 %의 계산 불균형(?)

:: 밑의 명령치고서 실수 대 실수 연산에서 정수가

:: 나오는 것이 아님을 알았습니다만...

:: coral=# select 10.0 / (10.0 % 3.0);

:: ERROR: Unable to identify an operator '/' for types 'float8' and 'numeric'

:: You will have to retype this query using an explicit cast

::

:: 라는군요. 해서... 상기님의 말씀대로

::

:: create table a as select (10.0 % 3.0);

:: 라고 했더니만...

::

:: coral=# \d a

:: Table "a"

:: Attribute | Type | Modifier

:: ///////////+/////////+//////////

:: ?column? | numeric |

::

:: 라고 하더군요.

::

:: // 결국은 나머지 연산자인 %가 말썽이었습니다.

::

:: 혼란스럽게한점 죄송스럽게 생각합니다...(꾸벅)

::

:: 인천의 나사 풀린 산호...

[Top]
No.
제목
작성자
작성일
조회
2749비슷한 문자열을 찾는 쿼리.. --;
이태웅
2001-05-15
2712
2753┕>Re: 비슷한 문자열을 찾는 쿼리.. --;
정재익
2001-05-15 18:18:17
3092
2747버전에 따른 속도 개선이 있나요.
강상우
2001-05-15
2957
2748┕>Re: 버전에 따른 속도 개선이 있나요.
정재익
2001-05-15 14:40:10
3309
2746오묘한 printf() ??
이태웅
2001-05-15
2809
2741묘한 수식 (중간 보고...)
신현호
2001-05-15
3857
2743┕>Re: 묘한 수식 (중간 보고...)
정재익
2001-05-15 09:07:48
4208
2744┕>Re: 연산자 이야기
김상기
2001-05-15 11:05:55
4636
2745 ┕>Re: Re: 연산자 이야기 (감사합니다.)
신현호
2001-05-15 12:21:53
4967
2734[질문] rowid같이 해당되는 레코드를 바로 액세스하려면??
이병기
2001-05-14
3960
2737┕>Re: [질문] rowid같이 해당되는 레코드를 바로 액세스하려면??
정재익
2001-05-14 18:50:35
3960
2742 ┕>Re: Re: [질문] rowid같이 해당되는 레코드를 바로 액세스하려면??
이태웅
2001-05-15 08:59:51
4085
2729테이블의 존재여무를 알수있는 쿼리는..알려주세요..
정철희
2001-05-14
3847
2731┕>Re: 시스템 카탈로그를 사용하는 방법이 있습니다.
신현호
2001-05-14 10:24:27
4151
2732┕>Re: 테이블의 존재여무를 알수있는 쿼리는..알려주세요..
정철희
2001-05-14 12:33:31
4186
2733 ┕>Re: Re: 테이블의 존재여무를 알수있는 쿼리는..알려주세요..
정재익
2001-05-14 13:50:13
3985
2725묘한 수식 계산...
신현호
2001-05-14
3763
2726┕>Re: 묘한 문자열 처리...
이태웅
2001-05-14 09:26:18
4009
2727 ┕>Re: Re: 묘한 문자열 처리...
신현호
2001-05-14 10:11:38
4030
2730  ┕>어라? 오동작? 실수?
신현호
2001-05-14 10:13:09
4049
2728 ┕>Re: Re: 묘한 문자열 처리...
신현호
2001-05-14 10:11:38
3812
2735 ┕>Re: Re: 묘한 문자열 처리...
삐진앙마
2001-05-14 16:41:45
3855
2736  ┕>Re: Re: Re: 묘한 문자열 처리...
삐진앙마
2001-05-14 16:50:41
4099
2751 ┕>Re: Re: 묘한 문자열 처리...
가우
2001-05-15 16:20:02
4044
2738┕>Re: 제 생각에는....
김일형
2001-05-15 03:13:23
3922
2739 ┕>Re: Re: 제 생각에는....
신현호
2001-05-15 05:56:19
4020
2740  ┕>Re: Re: Re: 잘못아신듯 싶습니다.
김상기
2001-05-15 06:54:34
4309
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다