본문 바로가기
🛠️Skill/SQL

[SQL문법] 문자(LENGTH, REPLACE, CONCAT)함수, 날짜&시간 함수

by Istj_eff 2022. 11. 9.
💡 SELECT  함수(컬럼이름1)
                     , 함수(컬럼이름2)
      FROM 테이블 ;

1. 문자 함수

LENGTH() 문자열 길이 반환
TRIM() 앞,뒤 공백 제거
UPPER(), LOWER() 대문자 / 소문자로 변경
LEFT(값, N) 왼쪽부터 N 번째까지
RIGHT(값, N) 오른쪽부터 N번째까지
REPLACE() 특정 문자를 찾아서 변경

 

▶ 예제

# LENGTH
SELECT NAME, length(NAME) -- NAME컬럼의 문자열 길이
FROM STOCK_INFO
ORDER BY 2 DESC; -- 2번째 컬럼 문자열이 긴 순서대로 정렬(내림차순)

# TRIM -- 앞뒤 공백 제거
SELECT trim('   YUMIN   ')

SELECT *
FROM STOCK_INFO
WHERE REGION = TRIM('  CN '); -- 휴먼에러로 공백이 붙은 상태의 문자로 조회가 안될때 주로 사용

# LOWER
SELECT LOWER(NAME)
FROM STOCK_INFO

# LEFT
SELECT LEFT(NAME, 3) -- 앞에서 3번째까지 가져옴
FROM STOCK_INFO;]

# RIGHT
SELECT NAME, RIGHT(NAME, 3)
FROM STOCK_INFO;

# REPLACE
SELECT NAME, REPLACE(NAME, 'LIMITED', 'LTD') --NAME컬럼에서 LIMITED를 LTD로 바꿔서 불러옴
FROM STOCK_INFO;

 

LPAD(값, 총 문자길이, 채울 문자)
RPAD(값, 총 문자길이, 채울 문자)
지정한 길이 만큼 왼쪽부터/오른쪽부터 특정문자로 채움
SUBSTRING() 특정 위치에서 자르기
CONCAT() 문자 붙이기
CONCAT_WS() 문자 사이에 값 넣기

▶ 예제

# LPAD
SELECT ID, LPAD(ID, 6, 0) --ID를 6자리가 되게만들고, 빈자리는 왼쪽부터 0으로 채우기
FROM STOCK_INFO;

# RPAD
SELECT ID, RPAD(ID, 6, 'A') --ID를 6자리가 되게만들고, 빈자리는 오른쪽부터 'A'로 채우기
FROM STOCK_INFO;
# SUBSTRING
SELECT SUBSTRING('2020-10-10', 1, 4) YEAR -- 1번째부터 4글자 잘라서 불러오기, 컬럼명은 YEAR
	     SUBSTRING('2020-10-10', 6, 2) MONTH -- 6번째부터 2글자 잘라오기, 컬럼명은 MONTH
=> 2020 10

 

 

리트코드 예시 문제 - 첫 번째 문자만 대문자로, 나머지는 소문자로 변경

2022.12.23 - [Data Analytics/CodingTest] - [leetcode] 1667. Fix Names in a Table / CONCAT, SUBSTRING

 

[leetcode] 1667. Fix Names in a Table / CONCAT, SUBSTRING

1667. Fix Names in a Table Write an SQL query to fix the names so that only the first character is uppercase and the rest are lowercase. Return the result table ordered by user_id. The query result format is in the following example. 첫 번째 문자만

dataanalysisdot.tistory.com

 


2. 날짜 & 시간 함수

CURDATE() 현재 날짜 반환
CURTIME() 현재 시간 반환
NOW() 현재 날짜와 시간 반환
YEAR() 연도 반환
MONTH() 월 반환
DAY() 일 반환
LAST_DAY() 해당 월의 마지막 일 반환
WEEKDAY() 요일 값 반환
월요일 : 0
DAYNAME() 요일 이름 반환

 

ADDDATE() 시간 / 날짜 더하기
SUBDATE() 시간 / 날짜 빼기
DATEDIFF() 두 시간/ 날짜의 일 차이 반환
TIMEDIFF() 두 시간/날짜의 시간 차이 반환

 

%Y 4자리 연도
%y 2자리 연도
%M 영문 월(길게)
%b 영문 월(짧게)
%m 두자리 숫자 월
ex) 01, 02..12
%c 한자리 숫자 월
ex) 1, 2, ..12
%W 영문 요일 (길게)
%a 영문 요일 (짧게)
%i
%T hh:mm:ss
%d 일자 (두자리)
ex) 01,02..31
%e 일자 (한자리)
ex) 1,2,3..31
%I 시간(12시간)
%H 시간(24시간)
%r hh:mm:ss AM,PM
%S

 

▶ 날짜 함수 기본 예제

SELECT curdate()
	     ,curtime()
       ,now()
       ,year(now())
       ,month(now())
       ,day(now());

# 해당 컬럼의 연도, 월, 일만 뽑고싶을때
SELECT marketdate, YEAR(marketdate), MONTH(marketdate),DAY(marketdate)
FROM STOCKETF_PRICE;


# 해당 월의 마지막 일 뽑기 -> 매월 말에 하는 업무의 일자를 기록하려고 할때 주로 사용
SELECT marketdate, LAST_DAY(marketdate)
FROM STOCKETF_PRICE;


# ADDDATE
SELECT marketdate, LAST_DAY(marketdate),
	   ADDDATE(LAST_DAY(marketdate), 1) -- 다음달 첫째날을 구하고 싶을때 사용
FROM STOCKETF_PRICE;
=> 2020-04-29	 2020-04-30	 2020-05-01


# SUBDATE
SELECT marketdate,
	   subdate(marketdate,3)
FROM STOCKETF_PRICE;
=> 2020-04-29	 2020-04-26


# datediff
SELECT distinct marketdate, LAST_DAY(marketdate), --distinct 중복제거
	   datediff(marketdate, LAST_DAY(marketdate)) -- marketdate와 lastday날짜 차이
FROM STOCKETF_PRICE;
=> 2020-04-29	 2020-04-30	 -1

 

 date_format() 기본 예제

SELECT distinct date_format(marketdate, '%Y %M')
FROM STOCKETF_PRICE
order by marketdate;
=> 2018 January
2018 February
2018 March
2018 April
.
.

SELECT distinct marketdate, date_format(marketdate, '%Y년')
FROM STOCKETF_PRICE
order by marketdate;
=> 2018-01-02	  2018

 

 

 

 

댓글