ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL - 형식 변환 함수와 포맷 문자
    DataBase/Oracle 2022. 1. 19. 19:21
    728x90
    반응형

    SQL - 형식 변환 함수와 포맷문자

     

     

     

    숫자  - >  문자열 , 문자열 -> 숫자

     

    포맷문자 설명
    9 숫자
    0 빈자리를 채우는 문자
    $ 앞에 $ 표시
    , 천 단위 구분자 표시
    . 소수점 표시
    -- 숫자 -> 문자열   포맷방식이 숫자보다 길어야 한다
    SELECT TO_CHAR(12345678, '$99,999,999,999.99') FROM DUAL;	-- 결과 $12,345,678.00
    SELECT TO_CHAR(1234) FROM DUAL;					-- 1234 출력
    SELECT TO_CHAR(1234, '99999') FROM DUAL;		-- _1234 출력 (_은 빈칸을 대신하여 표현했다)
    SELECT TO_CHAR(1234, '00000') FROM DUAL;		-- 01234 출력
    SELECT TO_CHAR(1234, 'L99999') FROM DUAL;		-- _\1234 출력
    SELECT TO_CHAR(1234, '$99999') FROM DUAL;		-- _$1234 출력
    SELECT TO_CHAR(1234, '00,000') FROM DUAL;		-- 01,234 출력
    SELECT TO_CHAR(1234, '999') FROM DUAL;			-- 오류(원하는 값이 안나옴)

     

     

    날짜 -> 문자열 , 문자열 -> 날짜

     

    포맷문자 설명
    YYYY , RRRR , YY , YEAR 년도표시 : 4자리 , Y2K , 2자리 , 영문
    MM , MON , MONTH 월표시 : 2자리 , 영문3자리 , 영문전체
    DD , DAY , DDTH 일표시 : 2자리 , 영문 , 2자리ST
    AP , PM 오전 , 오후 표시
    HH , HH24 시간표시 : 12시간 , 24시간
    MI 분표시 : 0~59분
    SS 초표시 : 0~59초

     

    -- 날짜를 문자열로
    SELECT TO_CHAR(SYSDATE, 'PM HH24:MI:SS') FROM DUAL;		-- 오후 22:01:05
    SELECT TO_CHAR(SYSDATE, 'AM HH:MI:SS') FROM DUAL;		-- 오후 10:01:21
    SELECT TO_CHAR(SYSDATE, 'MON DY, YYYY') FROM DUAL;		-- 1월  수, 2022
    SELECT TO_CHAR(SYSDATE, 'YYYY-fmMM-DD DAY') FROM DUAL;		-- 2022-1-19 수요일
    SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY') FROM DUAL;		-- 2022-01-19 수요일
    SELECT TO_CHAR(SYSDATE, 'YEAR, Q') || '분기' FROM DUAL;		-- TWENTY TWENTY-TWO, 1분기
    SELECT TO_CHAR(SYSDATE, 'YYYY"년" MM"월" DD"일"') FROM DUAL;	-- 2022년 01월 19일
    
    -----------------------------
    년도 포맷 관련
    -----------------------------
    -- YYYY와 RRRR 차이는 
    -- RRRR은 50년 이상일때 1900으로 설정
    --        50년 미만일때 2000으로 설정 되지만
    -- YYYY은 무조껀 2000으로 설정된다.
    SELECT
           TO_CHAR(SYSDATE, 'YYYY')		-- 2022
         , TO_CHAR(SYSDATE, 'RRRR')		-- 2022
         , TO_CHAR(SYSDATE, 'YY')		-- 22
         , TO_CHAR(SYSDATE, 'RR')		-- 22
         , TO_CHAR(SYSDATE, 'YEAR')		-- TWENTY TWENTY-TWO
      FROM DUAL;
      
      
    ------------------------------
    월 포맷 관련
    ------------------------------
    SELECT
           TO_CHAR(SYSDATE, 'MM')		-- 01
         , TO_CHAR(SYSDATE, 'fmMM')		-- 1
         , TO_CHAR(SYSDATE, 'MONTH')	-- 1월
         , TO_CHAR(SYSDATE, 'MON')		-- 1월
         , TO_CHAR(SYSDATE, 'RM')		-- 로마 숫자 1
      FROM DUAL;
    
    
    ------------------------------
    일 포맷 관련
    ------------------------------
    -- DDD는 1월 1일 기준으로 현재까지의 날짜를 표기
    -- DD는 달기준으로 현재까지
    -- D는 주 기준으로 현재까지
    
    SELECT
           TO_CHAR(SYSDATE, '"1년 기준 " DDD"일 째"')		-- 19
         , TO_CHAR(SYSDATE, '"달 기준 " DD"일 째"')			-- 19
         , TO_CHAR(SYSDATE, '"주 기준 " D"일 째"')			-- 4 (수요일)
      FROM DUAL;
      
      ----------------------------
      분기와 요일 포맷
      ----------------------------
      SELECT
           TO_CHAR(SYSDATE, 'Q"분기"')			-- 1분기
         , TO_CHAR(SYSDATE, 'DAY')				-- 화요일
         , TO_CHAR(SYSDATE, 'DY')				-- 화
      FROM DUAL;
    
    
    
    
    
    -- 문자열을 날짜로
    SELECT TO_DATE('2021-11-29') FROM DUAL;		-- 21/11/29
    -- 시분초까지 쓰면 포맷을 써줘야 한다
    SELECT TO_DATE('2021-11-29 12:23:03', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;	--21/11/29
    -- 문자열을 날짜로 2번째 방식
    SELECT TO_TIMESTAMP('1994-01-01 12:23:25', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;	-- 94/01/01 12:23:25.000000000

     

     

     

    WHERE 절에서 DATE 비교

     

    • 날짜 비교 연산시 문자열은 날짜로 자동 형변환이 된다
    • 날짜 비교 연산시 숫자는 날짜로 자동 형변환이 안된다.

     

    SELECT
           EMP_ID
         , EMP_NAME
         , HIRE_DATE
      FROM EMPLOYEE
    -- WHERE HIRE_DATE >= '20000101'; -- 자동 형변환 됨(문자열은 날짜로 자동 형변환 됨) 
    -- WHERE HIRE_DATE >= 20000101;   -- 자동 형변환 안됨(숫자는 날짜로 자동 형변환 안됨)
     WHERE HIRE_DATE >= TO_DATE(20000101, 'RRRRMMDD');

     

     

    문자 -> 숫자

     

    SELECT TO_NUMBER('123456789') FROM DUAL;
    
    -- 자동형변환
    SELECT '123' + '456' FROM DUAL;
    
    ----------------------------------
    숫자 포맷
    ----------------------------------
    -- 오류 숫자 중간에 ,가 있어 자동 형변환이 안된다.
    SELECT '1,000,000' + '500,000' FROM DUAL;
    
    -- 따라서 이와같이 작성해준다(참고로 ,는 출력되지 않는다)
    SELECT 
           TO_NUMBER('1,000,000', '99,999,999') + TO_NUMBER('500,000', '999,999')
      FROM DUAL;

     

     

    728x90
    반응형

    'DataBase > Oracle' 카테고리의 다른 글

    SQL - 집계 함수  (0) 2022.01.19
    SQL - NULL 관련 함수, 선택 함수  (0) 2022.01.19
    SQL - 날짜 내장 함수  (0) 2022.01.19
    SQL - 숫자 내장 함수  (0) 2022.01.19
    SQL - 문자열 내장 함수  (0) 2022.01.19

    댓글

Designed by Tistory.