오라클 숫자와 문자출력 쿼리 질문입니다. 0 9 1,877

by 또니 [SQL Query] 오라클 [2018.05.17 15:36:38]


33333.JPG (14,135Bytes)

안녕하세요. 고민하다 질문드립니다.

음수는 숫자 앞에 - 가, 양수는 숫자 앞에 + 가 붙어 소수점 첫째 자리까지 출력되게하려합니다.

0의경우 +,- 부호없이 0 만 출력


SELECT TO_CHAR(ROUND(N,1),'S999.9') 
SELECT TO_CHAR(ROUND(N,1),'S000.0') 
도 이용해보고

WITH t AS
(
SELECT TO_NUMBER('0.81111111') AS N FROM DUAL UNION ALL
SELECT TO_NUMBER('11.8888888') AS N FROM DUAL UNION ALL
SELECT TO_NUMBER('-43.333333') AS N FROM DUAL UNION ALL
SELECT TO_NUMBER('-0.333333') AS N FROM DUAL UNION ALL
SELECT TO_NUMBER('12.2') AS N FROM DUAL UNION ALL
SELECT TO_NUMBER('23') AS N FROM DUAL UNION ALL
SELECT TO_NUMBER('0') AS N FROM DUAL
)
SELECT DECODE(SIGN(N),'1','+'||ROUND(N,1),ROUND(N,1)) AS N
  FROM T

이렇게도 해보았으나..

+0.8 이렇게 출력하고 싶지만 +.8 이렇게 출력이됩니다.

0이 생략되는 부분을 해결하고 싶습니다.

+000.8 이런형태 말고 +0.8같이 소수점 앞부분의 0은 한자리만 출력되게 하고싶습니다.

 

아래사진 N은 원하는 출력값, BEFORE_N은 위의 쿼리의 실행 결과입니다.

도와주시면 감사하겠습니다ㅠㅠ

by 우리집아찌 [2018.05.17 15:49:14]
-- 근데 샘플이 문자형이네요.
WITH t AS
(
SELECT '0.81111111' AS N FROM DUAL UNION ALL
SELECT '11.8888888' AS N FROM DUAL UNION ALL
SELECT '-43.333333' AS N FROM DUAL UNION ALL
SELECT '-0.333333' AS N FROM DUAL UNION ALL
SELECT '12.2' AS N FROM DUAL UNION ALL
SELECT '0' AS N FROM DUAL
)
SELECT CASE WHEN SIGN(N) = 1 THEN '+' END || RTRIM(TO_CHAR(N,'FM999,990.9'),'.') N
     , DECODE(SIGN(N),'1','+'||ROUND(N,1),ROUND(N,1)) AS N
  FROM T 
  
 

 


by 또니 [2018.05.17 15:58:58]

제가 사용하는 데이터에서의 문제를 예시로 급하게 샘플만들다보니 문자형으로 썼네요ㅠㅠ 

답변감사합니다.


by 마농 [2018.05.17 16:13:29]

예시 자료가 더 다양해야 합니다.
소수점 이하 수가 없는 정수 예를 포함하여
원본 대비 결과표 형태로 질문해 주세요.


by 또니 [2018.05.17 16:44:25]

요청하신대로 게시글 수정했습니다!!

사진의 N컬럼은 아찌님 방법으로 나타낸것입니다!


by 우리집아찌 [2018.05.17 16:58:26]

또니님.. 원하시는 예시 BEFORE / AFTER 를 주셔야할것 같은데요..


by 또니 [2018.05.17 17:21:22]

아찌님~ 게시물수정해서 사진올릴때 게시글에 "아래사진 N은 원하는 출력값, BEFORE_N은 위의 쿼리의 실행 결과입니다." 라고 써놓았어요!!

BEFORE_N 이 제가 이상하게 짜던 쿼리이고요 ->BEFORE

아찌님 쿼리실행해보니 원하는 출력값이 나와서 N컬럼(원하는 결과)을 아찌님 쿼리로 구해서 캡쳐했습니다! 이것이 AFTER가 되겠습니다.

제가 AFTER(사진의 N 컬럼) 와 BEFORE(사진의 BEFORE_N)를 따로 출력할걸 그랬나봐요ㅠㅠ


by 또니 [2018.05.17 17:38:28]

아. 제가 짠것에서 AFTER를 구하려던건 아니고요

SELECT TO_NUMBER('0.81111111') AS N FROM DUAL UNION ALL

SELECT TO_NUMBER('11.8888888') AS N FROM DUAL UNION ALL

SELECT TO_NUMBER('-43.333333') AS N FROM DUAL UNION ALL

SELECT TO_NUMBER('-0.333333') AS N FROM DUAL UNION ALL

SELECT TO_NUMBER('12.2') AS N FROM DUAL UNION ALL

SELECT TO_NUMBER('23') AS N FROM DUAL UNION ALL

SELECT TO_NUMBER('0') AS N FROM DUAL

그냥 이 데이터에서 원하는 출력값을 구하고 싶었는뎅... 

제가 짜보다가 잘 안된것을 올린거였는데 혼란이..


by 마농 [2018.05.17 16:58:02]
WITH t AS
(
SELECT 0.81111111 n FROM dual
UNION ALL SELECT 11.8888888 FROM dual
UNION ALL SELECT -43.333333 FROM dual
UNION ALL SELECT  -0.333333 FROM dual
UNION ALL SELECT       12.2 FROM dual
UNION ALL SELECT         23 FROM dual
UNION ALL SELECT          0 FROM dual
)
SELECT n
     , DECODE(n, 0, '0', RTRIM(TO_CHAR(n, 'fms990.9'), '.')) c
  FROM t
;

 


by 또니 [2018.05.17 17:22:41]

감사합니다 마농님!오늘 여러가지 방법을 모두 배우게 되네요!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입