yuzu
10
2019-10-18 13:15:54 작성 2019-10-18 13:30:42 수정됨
4
176

오라클 한 질의문에 TO_CHAR를 3번 쓰면 invaild number 오류가 납니다.


오라클에서

Name           Date          DAY

--------------------------------------

Test    04-JAN-99     Monday

이런 형식으로 월요일, 화요일, 수요일 순으로 정렬 하고 싶습니다.


select name, TO_CHAR(date, 'DD-MON-YY') AS DATE, TO_CHAR(date, 'DAY') AS DAY 
from book 
order by DAY;

정상출력이 되는데 금요일, 월요일, 토요일 순으로 나옵니다.



select name, TO_CHAR(date, 'DD-MON-YY') AS DATE, TO_CHAR(date-1, 'DAY') AS DAY
from book
order by DAY;

정상출력이 되는데 금요일, 월요일, 토요일 순으로 나옵니다.


제가 원하는 방식은 이렇게 하고 싶은데

select name, TO_CHAR(date,'DD-MON-YY') AS DATE, TO_CHAR(date, 'DAY') AS DAY 
from book 
order by to_char(date-1,'D');

select name, TO_CHAR(date,'DD-MON-YY') AS DATE, TO_CHAR(date, 'DAY') AS DAY

                      *

ERROR at line 1:

ORA-01722: invalid number 

이런 오류가 나타납니다.


그래서 제가 원하는 출력 방식으로 출력 할려면 질의문을 어떻게 수정해야됩니까?

0
0
  • 답변 4

  • 굴림체
    162
    2019-10-18 13:31:34
    SELECT
      nation_cd,
      name
    FROM
      nation
    ORDER BY decode(nation_cd,'KOR','1','USA','2','JPN','3','CHN','4','GBR','5','DEU','6','ITA','7','FRA','8') ASC


    국가 코드 정렬 쿼리 인데 이거 참조해서 짜보세요

    월화수목금토일도 결국 문자열로 가나다라마바사아.. 순으로 정렬되서 원하는대로 안나온거 같은대
    저거 참조해서 짜시면 될거같아요 ㅎ
    0
  • 릴보너
    131
    2019-10-18 13:37:31 작성 2019-10-18 13:39:24 수정됨
    select name, TO_CHAR(date,'DD-MON-YY') AS DATE, TO_CHAR(date, 'DAY') AS DAY ,to_char(date-1,'D') AS DAYotw
    from book order by DAYotw

    select 문에 order by TO_CHAR(date-1,'D') AS 값이름 추가 하시고

    order by 에  값이름  넣으면 됩니다.

    0
  • 그만물어봐
    453
    2019-10-18 14:12:09

    릴보너 님 답변에 한표~!

    또는

    질문자님 처럼

    직접 ORDER BY 구문에 써도 상관 없습니다.

    뭔가 다른 오류가 있는듯 하네요~!



    WITH BOOK AS
    (
    	SELECT 'A' AS A
    		  , TO_DATE('2019-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AS B
    	  FROM DUAL
    	UNION ALL
    	SELECT 'B' AS A
    		  , TO_DATE('2019-01-05 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AS B
    	  FROM DUAL
    	UNION ALL
    	SELECT 'C' AS A
    		  , TO_DATE('2019-01-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AS B
    	  FROM DUAL
    )
    SELECT A
    	  , TO_CHAR(B, 'DD-MON-YY') AS "DATE"
    	  , TO_CHAR(B, 'DAY') AS "DAY"
      FROM BOOK
     ORDER BY TO_CHAR(B - 1, 'D')


    0
  • yuzu
    10
    2019-10-18 14:54:10 작성 2019-10-18 15:12:56 수정됨

    답변에 감사드립니다. 알고보니 한 글자 때문에 오타가 났네요.

    select name, TO_CHAR(date,'DD-MON-YY') AS DAT, TO_CHAR(date, 'DAY') AS DAY 
    from book 
    order by to_char(date-1,'D');
    이렇게 하니 오류가 안생깁니다.
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.