날짜 자리수 변경? 0 8 717

by 꿈꾸라 [Oracle 기초] [2018.05.30 10:52:07]


데이터가

 

20180530 이런식으로 YYYYMMDD 로 된 자료들이 있습니다

이자료를 가공해서

201805   즉 5월에만 어쩌고한다 라는 조건으로 구하고싶은데

이런식으로 형태를 강제로 바꾸는걸 어떻게하면좋을까요?

 

by 우리집아찌 [2018.05.30 10:58:54]
--YYYYMMDD 컬럼이 문자타입이고 잘못된 데이터가 없을 경우

-- LIKE

WHERE YYYYMMDD LIKE '201805%'

-- BETWEEN

WHERE YYYYMMDD BETWEEN '201805' || '01'  AND '201805' || '31'

-- AND

WHERE YYYYMMDD >= '201805' || '01'  

     AND YYYYMMDD <=  '201805' || '31'



 


by 꿈꾸라 [2018.05.30 11:01:18]

그렇게되면 출력이

20180501

~20180530 이런식으로 나오는거아닌가요?

제가원하는답은 201805 까지만 나오는거라서 ㅠ


by 우리집아찌 [2018.05.30 11:07:04]

원하시는 결과가 어떤것이시지요?


by 꿈꾸라 [2018.05.30 11:08:36]

20180501 부터 20180530 까지

수백개의 날짜가 데이터로 있는데

최종적으로는 5월에만 일어났던 일 로 취합을 할거라서

201805 로 떠야됩니다 

 


by 꿈꾸라 [2018.05.30 11:09:55]
날짜 ㅈㅏㅇ소
201805 A
201805 B

뭐 이런식으로요

근데 가공되기전의 날짜 는 DAY까지 나와있고 아주많이있습니다.

그리고 기존날짜는 VARCHAR2 형입니다.


by 꿈꾸라 [2018.05.30 11:17:16]

우연히 오라클 쪽 강좌보다가 해결됐습니다

SUBSTR(1,6)

쓰니 제가 원하는 결과가 나왔습니다

설명이부족하여 답변힘드셨을텐데 감사합니다


by 신이만든지기 [2018.05.30 11:16:40]
select substr(ymd, 1, 6) ym
  from table_name
 where ymd between '20180501' and '20180530';

 


by 마농 [2018.05.30 12:55:09]

문자를 원하는 길이만큼 잘라서 사용하시면 됩니다.
다만 조건 주실때 이렇게 잘라서 주면 안좋구요.
조건은 dt 그대로 해서 주시고 - 우리집아찌님 답변 참조
사용할때만 잘라서 사용하세요 - SUBSTR(dt, 1, 6)
집계가 필요하다면 GROUP BY 를 사용해야 합니다.

SELECT SUBSTR(dt, 1, 6) ym
     , loc
     , COUNT(*) cnt
  FROM t
-- WHERE SUBSTR(dt, 1, 6) = '201805'    -- (X)
 WHERE dt LIKE '201805%'                -- (O)
 GROUP BY SUBSTR(dt, 1, 6), loc
;

 

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