[오라클] 현재 시각/날짜 알려주기, WHERE문에 날짜로 찾기 / 아스키 코드

심심이·2024년 2월 18일

oracle

목록 보기
6/40
  • 날짜타입은 date 이다.

  • date 타입의 기본적인 표현방식은 'RR/MM/DD' 으로 나타내어진다.

  • RR 은 년도의 2자리만 나타내어준다. 50 ~ 99 는 1950 ~ 1999, 00 ~ 49 는 2000 ~ 2049 을 말하는 것이다.

  • MM 은 월이고, DD 는 일이다.

    현재 시각 알려주기


---------------------현재 시각 구하기 -------------------
SELECT 
	sysdate -- 24/02/16
	, current_date -- 24/02/16
    , localtimestamp -- 24/02/16 14:14:03.049000000 (시 분 초까지 나옴) 
    , current_timestamp -- 24/02/16 14:14:59.263000000 +09:00
    , systimestamp -- 24/02/16 14:14:59.263000000 +09:00
FROM 
	dual;


날짜의 모양 원하는 형식으로 바꾸기

SELECT 
	sysdate -- 24/02/16Y
    , to_char( sysdate, 'yyyy-mm-dd' ) -- 날짜를 원하는 형식으로 변환
    , to_char( sysdate, 'hh24-mi-ss' ) -- 시 / 분 / 초 14-19-12
    , to_char( sysdate, 'yyyy-mm-dd hh24:mi:ss' ) --2024-02-16 14:19:12
    , to_char( sysdate, 'yyyy/mm/dd hh24:mi:ss' ) --2024/02/16 14:19:12
	, to_char( sysdate, 'yyyy-mm-dd AM hh:mi:ss' ) --2024-02-16 02:19:12 오전과 오후를 나타내기 위해 am 또는 pm 입력
FROM 
	dual;

활용> 생일이 3월인 사람을 조건으로 찾을 경우

WHERE TO_CHAR(date_of_birth, 'mm') = '03'; -- 지정된 날짜를 원하는 형식으로 바꾼 뒤 값과 일치시키는 것을 찾는다. 

문자열을 날짜 형태로 바꾸기

  • 오라클에서 문자열을 날짜형 데이터로 형 변환을 하기 위해서는 TO_DATE 함수를 사용하면 된다.
  • 오라클에서는 날짜 포맷의 대소문자를 구분하지 않는다. 'YYYY-MM-DD HH24:MI:SS' → 'yyyy-mm-dd hh24:mi:ss'로 변경해도 정상적으로 작동한다.
  • 날짜의 시간이 12시간 단위면 hh24:mi:ss → hh:mi:ss로 변경하면 된다.
  • 년/월/일의 위치를 변경하여 포맷을 정의할 수 있다.

TO_DATE("문자열", "날짜 포맷") -- 날짜 포맷을 지정할 것을 권장
시스템의 설정된 날짜 형식과 일치하지 않은 문자열 값인 경우 오류가 발생할 수 있으니 주의해야 한다.

 to_date( '2006-12-31 09:00:00','yyyy-mm-dd hh24:mi:ss')

날짜 수정하기

employees 테이블에 저장된 사원번호가 154인 행에 대해서 hire_date (입사일자) 컬럼의 값을 '2006-12-31 09:00:00'으로 수정(변경)하고자 한다.


UPDATE 
	employees 
SET 
	hire_date = to_date( '2006-12-31 09:00:00','yyyy-mm-dd hh24:mi:ss')
WHERE 
	employee_id = 154;
-- 1 행 이(가) 업데이트되었습니다.

/*
WHERE절의 = 는 같다라는 뜻이지만, SET 의 = 는 대입한다는 뜻이다. 
날짜 타입에 문자열을 넣는 것이므로 타입변환이 필요하다. 

to_date() 를 통해 '2006-12-31 09:00:00' 문자열을 
'yyyy-mm-dd AM hh:mi:ss' 모양의 날짜로 바꿔준 뒤 hire_date에 넣어준다.
*/

commit;
-- 커밋 완료


SELECT employee_id AS "사원번호"
       , first_name || ' ' || last_name AS "사원명"
       , hire_date AS "입사일자"
       , to_char( hire_date, 'yyyy-mm-dd AM hh:mi:ss' ) AS "입사일자2"
FROM employees;

-- 154	Nanette Cambrault	06/12/31	2006-12-31 오전 09:00:00 <변경되어 업뎃 됨.


문제

-- employees 테이블에서 입사일자가 2005년 1월 1일부터 2006년 12월 31일까지 입사한 사원들만
-- 사원번호, 사원명, 입사일자를 나타내세요.


SELECT
    employee_id AS "사원번호", 
    first_name || ' ' || last_name AS "사원명", 
    hire_date AS "입사일자",
    to_char(hire_date, 'yyyy-mm-dd hh24:mi:ss') AS "입사일자"
FROM 
    employees
WHERE
    hire_date BETWEEN '05/01/01' AND '07/01/01';  
    -- 1월 1일 0시 0분 0초보다 작은 걸로 처리하여 12월 31의 모든 시각을 포함시킴.
    
    

날짜를 나타낼때 시,분,초 가 없는 년,월,일만 나타내어주면 자동적으로 0시0분0초가 된다. 즉, 자정(그날의 시작)을 뜻한다.

즉 24-01-01부터 24-01-10일까지 나타내고 싶은 경우, 10일이 아닌 11일을 입력해주어야 한다. '24-01-01' 년월일 입력시 자정으로 인식하여 그 이후는 포함시키지 않기 때문이다.

profile
개발하는 심심이

0개의 댓글