착해지는 중 입니다.

[SQL] 데이터 타입 및 변환 함수 본문

BackEnd/Sql

[SQL] 데이터 타입 및 변환 함수

박쓸개 2024. 5. 7. 15:33

##데이터 타입이란?

데이터베이스에 데이터를 저장/ 표현 할 떄 적합한 데이터 타입을 지정해야 함.

데이터베이스나 프로그래밍 언어에서 데이터 타입은 데이터의 종류와 크기, 저장 방식, 허용되는 연산 등을 결정합니다.

 

-데이터 타입이 같은 데이터
성질/특성이 같다

같은 방법으로 다룰 수 있다.

 

##오라클 내장 데이터 타입

문자 데이터 타입 (Character Data Types) - 

CHAR: 고정 길이 문자열을 저장합니다.(기본크기 1Byte)

VARCHAR2: 가변 길이 문자열을 저장합니다./반드시 최대 길이 명시

NVARCHAR2: 가변 길이의 유니코드 문자열을 저장합니다.

CLOB: 대용량 문자 데이터를 저장합니다.

LONG:테이블당 하나의 컬럼. 가변길이의 텍스트 저장 (최대 2기가바이트)

 

바이트 데이터 타입 (Binary Data Types):

RAW: CHAR형의 바이너리버전. 바이트 값의 고정 길이 데이터를 저장합니다.(최대 2000 바이트)

LONG RAW : LONG형의 바이너리버전, 한계도 그대로 적용됨.  

BLOB: 대용량 바이너리 데이터를 저장합니다.

 

숫자 데이터 타입 (Numeric Data Types):

NUMBER: 정밀한 숫자 값을 저장합니다.

INTEGER: 정수 값을 저장합니다.

FLOAT: 부동 소수점 숫자 값을 저장합니다.

BINARY_FLOAT, BINARY_DOUBLE: (빠른연산이 필요할떄 바이너리버전 사용 )이진 부동 소수점 숫자 값을 저장합니다.

자바랑 똑같은 FLOAT는 4바이트, DOUBLE은 8바이트

 

날짜 및 시간 데이터 타입 (Date and Time Data Types):

DATE: 날짜와 시간 정보를 저장합니다.(단일)

TIMESTAMP: 날짜와 시간 정보를 저장하며, 더 정밀한 시간 정보를 지원합니다.

(3가지로 나눠짐 TIMESTAMP, WITH TIMEZONE, WITH LOCAL TIMEZONE)

INTERVAL: 날짜 또는 시간 간격을 나타내는 데이터를 저장합니다.

이름 자릿수 용량 예제
DATE   7 BYTE 20,24,05,07,12,05,38
TIMESTAMP 0~9 자리,기본 6자리 7 OR
11 BYTE
20,24,05,07,12,05,38, .890000
TIMESTAMP WITH IME ZONE   13 BYTE 20,24,05,07,12,05,38 .890000 +09:00
TIMESTAMP WITH LOCAL TIME ZONE   7 OR
11 BYTE
20,24,05,07,12,05,38 .890000 타임존+(-)지역시간
INTERVAL_YEAR 0~9 자리,기본 2자리 5 BYTE  
INTERVAL_DAY   11 BYTE  
SELECT
    sysdate,
    sysdate + INTERVAL '3-2' YEAR TO MONTH,
    sysdate + INTERVAL '-3-2' YEAR TO MONTH,
    sysdate + INTERVAL '3' YEAR,
    sysdate + INTERVAL '3' DAY,
    sysdate + INTERVAL '1000 3:13' DAY ( 4 ) TO MINUTE,
    sysdate + INTERVAL '3:15' MINUTE TO SECOND,
    sysdate + INTERVAL '3:15:00' HOUR TO SECOND
FROM
    dual;

SELECT
    INTERVAL '3-2' YEAR TO MONTH  --3년 2개월
FROM
    dual;

 

 

##데이터 타입변환

변환함수 사용여부에 따라 암시적변환과 명시적변환으로 나뉨

 

자동으로 변환됨

암시적변환이 수행되는 조건 

   Assignment

   Expression Evaluation 

   숫자, 날짜 → 문자

 

명시적 변환

수동으로 변환

변환 함수 사용 

변환함수의 종류 

https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions002.htm#SQLRF51181

 

Single-Row Functions

Single-row functions return a single result row for every row of a queried table or view. These functions can appear in select lists, WHERE clauses, START WITH and CONNECT BY clauses, and HAVING clauses. Numeric Functions Numeric functions accept numeric i

docs.oracle.com

 

##변환함수

기본틀 - 변환함수명(변환할데이터, 형식모델, 추가옵션)

숫자 또는 날짜/시간 데이터를 문자로 표현하는 형식(방법)을 문자열로 나타낸 것
반대로 문자 데이터를 숫자 또는 날짜/시간 데이터로 변환할 때도 사용
날짜/시간 데이터를 세션의 날짜/시간 형식에 무관하게 표현 가능
형식 요소format element로 구성됨
숫자 형식 모델, 날짜/시간 형식 모델

https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements004.htm#SQLRF00210

 

Format Models

The total length of a datetime format model cannot exceed 22 characters. The default datetime formats are specified either explicitly with the NLS session parameters NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT, and NLS_TIMESTAMP_TZ_FORMAT, or implicitly with the

docs.oracle.com

 

대표적인 변환 함수

 

TO_NUMBER

문자형   숫자형

숫자 형식 모델과 형식요소

 

TO_CHAR

숫자형    문자형(TO_CHAR(number)

날짜/시간형   문자형(TO_CHAR(datetime)

날짜 /시간 형식 모델과 형식 요소

SELECT hire_date
,TO_CHAR(HIRE_DATE, 'YYYY yy mm Month mon MON DAY dy') --날짜데이터를 문자로변환
,TO_CHAR(HIRE_DATE, 'RM Rm rm WW w DDD DD D Q') --날짜데이터를 문자로변환
,TO_CHAR(HIRE_DATE, 'MM"월의 "DD"일"') --날짜데이터를 문자로변환
,TO_CHAR(HIRE_DATE, 'year DDsp, ddth Ddspth') --날짜데이터를 문자로변환

FROM EMPLOYEES;

 

TO_DATE

문자형   날짜/시간형

--문자를 날짜데이터로 바꿀 때
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE = '05/10/10'; --사용자가 직접입력하는거잖아.. 
-- ALTER SESSION SET NLS_DATE_FORMAT = 'YY/MM/DD'; 형식이 이렇게 되어있어야 위의 데이터가 들어갈수있음 

SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('2005년 09월 21일','YYYY"년" MM"월" DD"일"'); --찾는데이터가 적을경우 (인덱스가 있는경우) 이버전이 낫다. 

SELECT *
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE, 'YYYY"년" MM"월" DD"일"') = '2005년 09월 21일';

 

예제 풀기 PDF 155p

 

'BackEnd > Sql' 카테고리의 다른 글

[SQL] 조건부 표현식  (0) 2024.05.07
[SQL] 중첩 함수 및 NULL 관련 함수  (0) 2024.05.07
[SQL]단축키  (0) 2024.05.07
[SQL] 날짜 연산과 날짜 함수  (0) 2024.05.07
[SQL] 연산자  (0) 2024.05.03