반응형
Notice
Recent Posts
Recent Comments
Link
Today
Total
07-03 03:43
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
관리 메뉴

iOS 개발 기록 블로그

SQL 형 변환 (문자형, 숫자형, 날짜형) 본문

SQL

SQL 형 변환 (문자형, 숫자형, 날짜형)

crazydeer 2021. 12. 27. 22:00
반응형

변환 함수

to_char, to_number, to_date

데이터 타입을 변환하는 함수입니다.

 

테스트 (실행) 환경

웹에서 실행해볼 수 있는 사이트에서 코드를 실행해보았습니다.

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all 

 

SQL Tryit Editor v1.6

WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, Opera, and Edge(79). If you use another browser you will still be able to use our Try SQL Editor, but a different ver

www.w3schools.com

데이터 베이스 샘플도 제공하고 있으면 우측에 Restore Database 버튼을 눌러서 'Products'라는 DB를 불러와서 테스트하였습니다.

 

구조는 다음과 같고 77행이 있습니다.

 

샘플 데이터를 불러와서 임의의 코드를 실행해봅시다.

 

SQL은 기본적으로 자동으로 형 변환을 해주기는 하지만

성능(속도) 면에서 가급적 데이터 타입을 맞춰 SQL 문을 작성해주는 것이 좋습니다.

 

예를 들어 Price를 문자형으로 변환하고 싶다면

 

SELECT ProductName, to_char(Price)

  FROM Products
  WHERE Price = '14'

 

와 같이 사용하면 됩니다.

 

이유는 모르겠지만 위 사이트에서는 to_char(Price)가 되지 않지만 실제 SQL 환경에서 하면 잘 동작합니다.

아래의 사이트에서 다른 코드를 실행해보았습니다.

https://sqltest.net/

 

SQL Test

Free Online SQL Test Tool

sqltest.net

 

코드

 

결과

 

 

날짜 포맷

  1. 년도: RRRR, RR, YYYY, YY
  2. : MM, MON
  3. : dd
  4. 요일: day, dy
  5. 시간: HH, HH24
  6. : MI
  7. : SS
  8. : WW, IW

 

예제) 오늘부터 100달 뒤의 날짜의 요일을 출력하세요

 

select to_char(add_months(sysdate, 100), 'day')
  from dual;

 

 

 

to_date

예제) RR/MM/DD 형식으로 현재 세션의 날짜형식을 변경하시오

 

방법 1)

Alter session set nls_date_format = 'RR/MM/DD';

 

방법 2)

Select ename, hiredate

  From emp

  Where to_char(hiredate, 'RR/MM/DD')  = '81/09/10';

 

설명)

방법 1 오라클을 실행할 때마다 입력해서 날짜 형식을 바꿔줘야 합니다.

하지만 방법 2 그럴 필요가 없습니다.

그런데, 방법 2 같이 코딩하는 것은 악성 SQL 이다SQL이다. Where 절의 좌변을 가공하면 성능이 느려 집니다.

 

따라서 좌변을 가공하는 것이 아니라 아래와 같이 우변을 가공 해야 합니다.

 

방법 3)

Select ename, hiredate

  From emp

  Where hiredate = to_date('81/09/10', 'RR/MM/DD') ;

 

이렇게 하면 alter session을을 필요도 없고 to_char 을 필요도 없으며 성능도 빠릅니다. 

 

 

 

to_number

숫자형으로 형을 변환시켜주는 함수

 

예제) 테이블을 생성하고 값을 Insert 해주고 데이터를 조회해보세요.

 

create table test

  ( ename varchar2(20),

    sal varchar2(20) );

 

>> test라는 테이블 생성, ename이라는 varchar2 형 칼럼과 sal이라는 varchar2 형식의 컬럼 생성

 

 

insert into test values('scott', '3000')

insert into test values('smith', '1500')

commit;

 

>> 마찬가지로 문자형으로 데이터 삽입

 

 

select *

  from test

  where sal = 3000;

 

>> 조회할 때 위와 같이 '3000'이 아닌 3000. 즉, 숫자형으로 조회를 하면 내부적으로 문자형 데이터를 숫자형으로 자동으로 형 변환시키기 때문에 악성 SQL문입니다.

 

반응형