본문 바로가기

데이터 교육/SQL

[SQL] 09. 원하는 형식으로 컬럼 가공하기

출처: 패스트 캠퍼스 - 한 번에 끝내는 데이터 분석 초격차 패키지 Online.


컬럼 가공하기

cast / left, substring, rignt / concat / coalesce


 

목차
1. 숫자를 문자열로 바꿔주기: cast
2. 문자열 컬럼에서 일부만 잘라내기: left, substring, right
3. yyyy-mm-dd 형식으로 이어주기: concat, ||
4. null값 임의값으로 바꾸기: coalesce

 


1. 숫자를 문자열로 바꿔주기: cast

dt: 날짜(숫자데이터)

cast: 형태를 바꿔주는 쿼리

varchar: 문자 형식

 

1) dt데이터만 적용했을 때

 

 

 

2) cast함수를 이용하여 형태를 바꾸기: cast (a as b)

select dt, cast (dt as varchar)
from online_order oo

숫자형식(nn,nnn,nnn)에서 문자형식(nnnnnnnn)으로 변경됩니다

 

 

 

3) 컬럼명 변경해주기: as

as를 사용하여 하단의 컬럼명을 dt에서 yyyymmdd로 변경합니다

 

 


 

2. 문자열 컬럼에서 일부만 잘라내기: left, substring, right

1) dt데이터를 문자로 바꾼 상태에서 년도 데이터만 남기기 : left

select dt, left(cast(dt as varchar),4) as yyyy   >>>> 해석: 앞에서 4개(2021)의 글자만 남기기(left)
from online_order oo

 


 

2) dt데이터를 문자로 바꾼 상태에서 년도와 월별 데이터 남기기: substring

 

select dt, left(cast(dt as varchar),4) as yyyy,
substring(cast (dt as varchar),5,2) as mm  >>>> 해석: 앞에서 5번째부터 글자2개 남기기
from online_order oo

 


 

3) dt데이터를 문자로 바꾼 상태에서 년도, 월별, 날짜별 데이터 남기기: right

select dt, left(cast(dt as varchar),4) as yyyy,
substring(cast(dt as varchar),5,2) as mm,
right(cast(dt as varchar),2) as dd    >>>> 해석: 오른쪽부터 2개 남기기
from online_order oo

 


 

3. yyyy-mm-dd 형식으로 이어주기: concat, ||

1) concat함수로 이어주기 concat( yyyy  , '-', mm, '-', dd )

select dt,
concat(
left(cast(dt as varchar),4), '-',
substring(cast(dt as varchar),5,2), '-',
right(cast(Dt as varchar),2)) as yyyymmdd
from online_order oo

 


 

2) | 키 이용

키보드의 Enter키 위에 있는 |키를 이용합니다

 

 

select dt,
left(cast(dt as varchar),4) || '-' ||
substring(cast(dt as varchar),5,2) || '-' ||
right(cast(Dt as varchar),2) as yyyymmdd
from online_order oo

 


 

4. null값인 경우, 임의값으로 바꿔주기

0) 주문 테이블에 있었던 null값을 조회해줍니다

 

 

 

1) coalesce(a,b) : 첫번째 컬럼(a)이 null이면, 컴마뒤의 값(b)으로 변환

select oo.userid, coalesce (oo.userid, 'NA')    >>>>  해석:  oo.userid가 null값이면, 'NA'로 변환해줘
from online_order oo
left join user_info ui on oo.userid = ui.userid

 


 

2) coalesce(a,b) 에서 a와 b가 동일한 유형(숫자 or 문자) 이어야한다

userid는 숫자형 / 'NA'는 문자형이기 때문에,  'NA'를 숫자 0으로 바꿔준다.

select oo.userid, coalesce (oo.userid, 0)
from online_order oo
left join user_info ui on oo.userid = ui.userid

 

 

 

'데이터 교육 > SQL' 카테고리의 다른 글

[SQL] 11. 날짜 관련 함수 활용하기  (0) 2023.05.29
[SQL] 10. case when절  (0) 2023.05.29
[SQL] 08. join절  (0) 2023.05.29
SQL 기본 문법 정리  (0) 2023.05.24
[SQL] 06. having 절  (0) 2023.05.24