SYSDATE

시스템의 현재 날짜와 시간을 반환한다

결과는 'YY/MM/DD HH24:MI:SS'로 표시한다

 

SYSTIMESTAMP

시스템의 현재 날짜와 시간,분,초,밀리초를 등을 반환한다.

결과는 'YY/MM/DD HH24:MI:SS.FF TZR TZD'로 표시한다

 

EXTRACT

SELECT
    EXTRACT(추출할요소 FROM 날짜컬럼)
FROM
    테이블;

 

함수 사용 설명
EXTRACT(YEAR FROM 날짜데이터 ) 연도
EXTRACT( MONTH FROM 날짜데이터 )
EXTRACT( DAY FROM 날짜데이터 )
EXTRACT( HOUR FROM 날짜데이터) 시간
EXTRACT( MINUTE FROM 날짜데이터 )
EXTRACT( SECOND FROM 날짜데이터 )

 

DATE 타입의 데이터를 지정한 요소만 추출해 NUMBER 타입으로 표시해준다.

 

현재시간에서 추출 할 때 시간부터는 SYSTIMESTAMP만 사용하도록 한다.

만약 계속 SYSDATE를 사용한다면

[ORA-30076: 발췌 소스에 발췌 필트가 부적당합니다] 라는 메세지가 표시된다.

 

TO_CHAR

SELECT
    TO_CHAR(날짜데이터,'포맷')
FROM
	테이블;

 

함수사용 설명 SYSDATE 추출결과
TO_CHAR( 날짜데이터, 'YYYY' ) 연도를 4자로 표시 2023
TO_CHAR( 날짜데이터, 'YY' ) 연도를 2자로 표시  
     
TO_CHAR( 날짜데이터, 'MM' ) 월을 2자로 표시 09
TO_CHAR( 날짜데이터, 'MON' ) 월을 X월, XX월로 표시 9월
     
TO_CHAR( 날짜데이터, 'DD' ) 일자를 2자로 표시  27 (1일인경우 '01'로 표시)
TO_CHAR( 날짜데이터, 'DDD' ) 1년중 몇 번째날인지 3자로 표시 270 (1월1일인경우 '001'로 표시)
     
TO_CHAR( 날짜데이터, 'D' ) 한 주중 몇 번째 날인지 표시 (1은 일요일 ) 4
TO_CHAR( 날짜데이터, 'DAY' ) 요일 3자로 표시 수요일
TO_CHAR( 날짜데이터, 'DY' ) 요일을 1자로 표시
     
TO_CHAR( 날짜데이터, 'WW' ) 1년중 몇 번째 주인지 표시 39
TO_CHAR( 날짜데이터, 'W' ) 1달중 몇 번째 주인지 표시 4
     
TO_CHAR( 날짜데이터, 'AM' ) 오전인지 오후인지 표시(PM과 동일) 오후
TO_CHAR( 날짜데이터, 'PM' ) 오전인지 오후인지 표시(AM과 동일) 오후
     
TO_CHAR( 날짜데이터, 'HH' ) 시간을 01~12시로 표시 07
TO_CHAR( 날짜데이터, 'HH24' ) 시간을 01~24시로 표시 19
     
TO_CHAR( 날짜데이터, 'MI' ) 분을 0~59분으로 표시 16
     
TO_CHAR( 날짜데이터, 'SS' ) 초를 01~ 5초로 표시 05

 

DATE데이터를 CHAR타입으로 변환시켜주는 TO_CHAR()을 이용하여

날짜데이터를 원하는 포맷으로 표시할 수 있다.

 

고정문자열이기때문에 1월, 1일도 '01'로 표시된다.

0을 없애고 싶을 땐 포맷앞에 FM을 같이 넣어주거나 NUMBER타입으로 변환한다.

 

EXTRACT와의 차이점은 타입 차이도 있지만 TO_CHAR()가 포맷이 더 많은편이다. 

 

포맷 출력결과
TO_CHAR( 날짜데이터, 'YYYYMMDD' ) 20230927
TO_CHAR( 날짜데이터, 'YYYY-MM-DD' ) 2023-09-27
TO_CHAR( 날짜데이터, 'YYYY/MM/DD' ) 2023/09/27
TO_CHAR( 날짜데이터, 'YY/MM/DD' ) 23/09/27
TO_CHAR( 날짜데이터, 'DL' ) 2023년 9월 27일 수요일
TO_CHAR( 날짜데이터, 'HH:MI:SS' ) 08:20:23
TO_CHAR( 날짜데이터, 'HH24:MI:SS' ) 20:20:23

 

정해진 포맷 외에 원하는 표시형식이 있다면 SUBSTR, ||로 조합하여 붙여줄 수 있다.

 

SELECT
	TO_CHAR(SYSDATE,'YYYY')||'년의 '||TO_CHAR(SYSDATE,'DDD')||'번째 날입니다.'
FROM
	DUAL;

 

 

오라클 공식문서 

SYSDATE (oracle.com)

SYSTIMESTAMP (oracle.com)

EXTRACT (datetime) (oracle.com)

TO_CHAR (datetime) (oracle.com)

'DB' 카테고리의 다른 글

서브쿼리 종류  (0) 2023.09.25

서브쿼리란

쿼리 안의 쿼리


서브쿼리의 종류

 

* WHERE절에서 사용

- 단일행 서브쿼리

서브쿼리의 결과가 1건인 서브쿼리
비교연산자(=,<,>등)는 단일행만 사용가능

 

 

- 다중 행 서브쿼리

서브쿼리의 결과가 여러건인 서브쿼리
다중행 비교연산자(IN, ALL, ANY, SOME) 사용

 

 

- 다중 칼럼 서브쿼리

여러컬럼을 한번에 비교한다

 

 

- 연관 서브쿼리

서브쿼리 안에서 메인쿼리의 컬럼을 사용한다

 

 

* 스칼라 서브쿼리 (SELECT절에서 사용)

서브쿼리 결과가 1셀만 반환

 

 

* 인라인 뷰 (FROM절에서 사용)

서브쿼리 결과를 테이블처럼 사용

 

 

* HAVING절에서 사용

그룹핑된 결과에 조건을 주기 위해 사용

 

 

* VALUES(INSERT문에서 사용)

서브쿼리의 결과를 삽입하기 위해 사용

 

 

* SET(UPDATE문에서 사용)

서브쿼리 결과로 수정하기 위해 사용

 


서브쿼리 사용시 고려할것

서브쿼리와 조인의 성능에 대한 부분을 고려해보아야 한다.

 

데이터의 양이 적은경우엔 큰 차이가 없지만

데이터가 많을수록 서브쿼리를 사용할 때 성능이 저하될 수 있다.

(무조건 서브쿼리가 성능을 저하시킨다는것은 아니고, 서브쿼리가 더 빠른 상황도 있다.)

 

* 서브쿼리가 메인쿼리보다 먼저 실행된 후 메인쿼리가 실행됨

* 몇몇 DBMS에서는 서브쿼리 최적화가 제한적이여서 가능한 사용하지 않는게 좋을수도 있음

* 서브쿼리가 어디에 어떻게 있느냐에 따라 인덱스를 제대로 활용하지 못하여

풀스캔같이 비효율적인 작업이 발생할 수 있음

 

-> 조인이 가능한경우 서브쿼리보다 최적화 된 조인을 사용한다

-> CTE (WITH)를 사용한다.

 

인라인뷰냐 스칼라냐

DMBS를 어떤것을 사용하냐, 어떤쿼리냐에 따라 달라지므로
꼭 ㅇㅇ가 좋다 라는 법은 없다.

 

복잡한 쿼리의 경우 인라인뷰를 사용하여 쿼리를 여러 단계로 분할하는것이 좋은 경우가 많고

단순한 추가정보를 가져오는데에는 스칼라 서브쿼리가 적합한 경우가 많다

'DB' 카테고리의 다른 글

[SQL/Oracle] 날짜 함수 정리  (0) 2023.09.27

+ Recent posts