2014-04-15 5 views
0

두 테이블의 데이터를 선택하기 위해 기본 요청을 사용하고 있습니다.
pgAdmin 콘솔에서 요청을 실행하면 결과가 제대로 반환되지만 응용 프로그램에서 요청을 실행하면 round() 함수를 사용할 때 모든 열에 동일한 값이 반환됩니다.Select 절은 다른 열에 대해 동일한 값을 반환합니다.

SELECT s.id, 
     p.nom, 
     p.prenom, 
     round(s.column1, 2), 
     round(s.column2, 2), 
     round(s.column3,2) 
FROM table1 s 
    INNER JOIN table2 p USING (id) 
where s.id_type = 2 
and s.id_example=7 
ORDER BY p.nom, p.prenom 

나는이 요청을 실행 요청 아래 , 값으로 20 반환 round(s.column1, 2) 경우에, 나는 round(s.column2, 2)round(s.column3,2)에 대해 동일한 값을 가지고있다.
나는 별칭을 사용하려하지만 다음과 같은 예외가받은 : org.postgresql.util.PSQLException :

을에 의한 NaN의 그것은없이 말할 어려운

+0

Java로 앱을 개발하고 있습니까? 결과를 처리하는 방법을 보여주는 코드 스 니펫? – heikkim

답변

1

: Mauvaise valeur 르 타입의 BigDecimal을 부어 당신은 오류가 기본적으로 NaN (일명 아닌 수) 내가 포스트 그레스 'numeric 형식으로 자바의 동등한 것으로 이해 BigDecimal type, 유효한 값 아니라고 불평 ...

더 많은 코드를 보여주는.

포스트 그레스는 정수 타입의 플로트 및 임의 정밀도 유형 NaN 아니지만을 받아 같은 :

denis=# select 'NaN'::float; 
float8 
-------- 
    NaN 
(1 row) 

denis=# select 'NaN'::numeric; 
numeric 
--------- 
    NaN 
(1 row) 

denis=# select 'NaN'::bigint; 
ERROR: invalid input syntax for integer: "NaN" 
LINE 1: select 'NaN'::bigint; 
      ^

, 그것은 아마 당신의 ID 열이 정수하지 않은 표시, 당신이 잘못 구성한 것을 당신의 열이 잘못된 Java 유형에 매핑되거나 테이블에서 Java가 지원하지 않는 값 (예 : NaN)을 가지고있는 것으로 추측합니다 ... - 실제로는 NULL이어야합니다.

0

두 개의 독립적 인 문제이 있습니다.

첫 번째 하나는 아마도 입니다.입니다.
org.postgresql.util 당신이 당신의 질문에 선언 했어야하는 JDBC 드라이버를 사용하고 있다는 것을 나타냅니다!

당신이 열 별칭을 추가하지 않으면

, 세 round() 호출은 동일한 기본 열 별칭 round와 끝까지. 현재 JDBC는 그것에 대해별로 영리하지 못하며 중복 된 이름 집합의 첫 번째 열을 제외한 모든 것을 조용히 삼킨다.

pgAdmin 과 동일한 열 이름을 허용합니다. 그래서 같은 쿼리가 거기에서 작동하는 것 같습니다. 임의의 질의에 유용하지만, 진지한 것이 있다면 고유 한 열 이름을 제공해야합니다. 시도 :

SELECT s.id, 
     p.nom, 
     p.prenom, 
     round(s.column1, 2) AS col1, 
     round(s.column2, 2) AS col2, 
     round(s.column3, 2) AS col3 
FROM table1 s 
JOIN table2 p USING (id) 
where s.id_type = 2 
and s.id_example = 7 
ORDER BY p.nom, p.prenom

SQL 바이올린는 JDBC를 사용하여, 다음과 같은 데모 문제를 재현 할 수 있습니다 그 이유는 :
SQL Fiddle demo.

문제가 NaN입니다.이에 대해서는 @Denis' answer을 참조하십시오.
또한 두 개의 매개 변수가있는 the Postgres round() functionnumeric 데이터 형식에 대해서만 정의됩니다.

관련 문제