[MariaDB] 내장 함수① - 문자/시간/수치 관련

Geehyun(장지현)·2024년 2월 18일
1

MariaDB

목록 보기
5/12
post-thumbnail

함수

특정 기능을 수행하는 작은 프로그램으로 다양한 프로그래밍 언어에서 사용되는 개념입니다.
SQL에서도 해당 개념을 사용하며 다양한 내장 함수를 제공하고 있어 이를 이용할 수 있습니다.

함수명(인자, 인자,,,)

형식으로 사용할 수 있습니다.

인자로 넣어야하는 값들은 함수마다 다르니 아래의 MariaDB에서 주로 사용하는 함수 리스트를 보고 활용해보세요!

내장함수의 경우 양이 많아 두 개로 나눠서 작성했습니다.
➡️ MariaDB 내장 함수② - 제어흐름/정보 관련

문자 관련 함수

문자열을 다루는 내장 함수입니다! 가장 많이 사용됩니다.

문자열 자르기

No함수명설명
1LEFT(문자열 \ 변수 \ 열, 문자수)- 문자열의 왼쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
- 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.
2RIGHT(문자열 \ 변수 \ 열, 문자수)- 문자열의 오른쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
- 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.
3MID(문자열 \ 변수 \ 열, 시작위치, 문자수)- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
- 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.
- 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.
4SUBSTRING(문자열 \ 변수 \ 열, 시작위치, 문자수)- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
- 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.
- 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.
5SUBSTR(문자열 \ 변수 \ 열, 시작위치, 문자수)- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
- 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.
- 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.
6SUBSTRING_INDEX(문자열 \ 변수 \ 열, 구분문자, 개수)- 문자열의 왼쪽부터 입력받은 '구분문자'기준으로 잘라서 입력한 개수만큼 문자열을 리턴합니다.
- 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.
-- 1. LEFT(문자열 | 변수 | 열, 문자수)  : 문자열의 왼쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
-- 2. RIGHT(문자열 | 변수 | 열, 문자수) : 문자열의 오른쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
# 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.
SELECT LEFT('나는 바보가 아니다', 5) AS result;                # result : '나는 바보'
SELECT LEFT('나는 바보가 아니다', 100) AS result;              # result : '나는 바보가 아니다'
SELECT RIGHT('나는 바보가 아니다', 3) AS result;               # result : '아니다'
SELECT RIGHT('나는 바보가 아니다', 100) AS result;             # result : '나는 바보가 아니다'

-- 3. MID(문자열 | 변수 | 열, 시작위치, 문자수) : 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
-- 4. SUBSTRING(문자열 | 변수 | 열, 시작위치, 문자수) : 동일
-- 5. SUBSTR(문자열 | 변수 | 열, 시작위치, 문자수) : 동일
# 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.
# 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.
SELECT MID('나는 바보가 아니다', 4, 2) AS result;              # result : '바보'
SELECT MID('나는 바보가 아니다', 4, 100) AS result;            # result : '나는 바보가 아니다'
SELECT SUBSTRING('나는 바보가 아니다', 4, 2) AS result;        # result : '바보'
SELECT SUBSTRING('나는 바보가 아니다', 4, 100) AS result;      # result : '나는 바보가 아니다'
SELECT SUBSTR('나는 바보가 아니다', 4, 2) AS result;           # result : '바보'
SELECT SUBSTR('나는 바보가 아니다', 4, 100) AS result;         # result : '나는 바보가 아니다'

-- 6. SUBSTRING_INDEX(문자열 | 변수 | 열, 구분문자, 개수) : 문자열의 왼쪽부터 입력받은 '구분문자'기준으로 잘라서 입력한 개수만큼 문자열을 리턴합니다.
# 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.
SELECT SUBSTRING_INDEX('www.naver.com', '.', 2) AS result;   # result : 'www.naver'
# '.'으로 짜른 후 두번째 나눠진 곳 까지 문자열로 리턴 (=> 두번쨰 구분자를 만나기 직전까지의 문자열 리턴)

문자열 내 위치 찾기

No함수명설명
7INSTR(문자열 \ 변수 \ 열, 부분 문자열)- 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.
- 해당 부분 문자열이 없다면 0을 반환합니다.
- 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다.
8POSITION(부분 문자열 IN 문자열 \ 변수 \ 열)- 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.
- 해당 부분 문자열이 없다면 0을 반환합니다.
- 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다.
9LOCATE(부분 문자열, 문자열 \ 변수 \ 열, (생략가능) 시작위치)- 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.
- 시작위치는 생략가능하며, 생략 시 문자의 첫번째위치부터 찾고, 지정해줄 시 입력한 위치부터 부분문자열을 찾습니다.
- 해당 부분 문자열이 없다면 0을 반환합니다.
10ELT(정수, 문자열 목록(값, 값2,,,))- 주어진 문자열 목록에서 입력된 정수번째 값을 리턴해줍니다.
- 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.
11FIELD(찾을 값, 문자열 목록(값1, 값2,,,))- 주어진 문자열 목록에서 찾을 값의 위치를 반환해줍니다.
- 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.
12FIELD_IN_SET(찾을 값, 문자열(문자열 내에서 콤마로 구분필요))- 주어진 문자열 목록에서 찾을 값의 위치를 반환해줍니다.
- 찾을 값과 콤마로 구분된 값이 완벽히 일치해야해서 콤마로 구분된 기준으로 띄어쓰기라도 하나 더 있으면 못찾습니다.
- 콤마로 구분 안되어있어도 못찾습니다.
- 찾을 값이 해당 문자열 내에 없을 경우 0을 반환합니다.
-- 7. INSTR(문자열 | 변수 | 열, 부분 문자열) : 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.
-- 8. POSITION(부분 문자열 IN 문자열 | 변수 | 열) : 위와 동일
# 해당 부분 문자열이 없다면 0을 반환합니다.
# 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다.
SELECT INSTR('010-0000-0000', '-');
SELECT POSITION('-' IN '010-0000-0000');

-- 9. LOCATE(부분 문자열, 문자열 | 변수 | 열, (생략가능) 시작위치) : 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.
# 시작위치는 생략가능하며, 생략 시 문자의 첫번째위치부터 찾고, 지정해줄 시 입력한 위치부터 부분문자열을 찾습니다.
# 해당 부분 문자열이 없다면 0을 반환합니다.
SELECT LOCATE('-', '010-0000-0000');    # 맨 처음자리 부터 찾음
SELECT LOCATE('-', '010-0000-0000', 5); # 5 번째 자리부터 찾음

-- 10. ELT(정수, 문자열 목록(값, 값2,,,)) : 주어진 문자열 목록에서 입력된 정수번째 값을 리턴해줍니다.
# 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.
SELECT ELT(2, '월', '화', '수', '목', '금', '토'),  # '화' 반환
ELT(8, '월', '화', '수', '목', '금', '토');         # NULL 반환

-- 11. FIELD(찾을 값, 문자열 목록(값1, 값2,,,)) : 주어진 문자열 목록에서 찾을 값의 위치를 반환해줍니다.
# 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.
select FIELD('수', '월', '화', '수', '목', '금', '토'); # 3 반환

-- 12. FIELD_IN_SET(찾을 값, 문자열(문자열 내에서 콤마로 구분필요)) : 콤마로 값이 구분되어있는 문자열 내에서 찾을 값이 콤마로 구분한 위치로 몇번째에 위치해있는지 반환합니다.
# 찾을 값과 콤마로 구분된 값이 완벽히 일치해야해서 콤마로 구분된 기준으로 띄어쓰기라도 하나 더 있으면 못찾습니다.
# 콤마로 구분 안되어있어도 못찾습니다.
# 찾을 값이 해당 문자열 내에 없을 경우 0을 반환합니다.
SELECT FIND_IN_SET('수', '월,화,수,목,금,토');      # 3 반환
SELECT FIND_IN_SET('수', '월, 화, 수, 목, 금, 토'); # 0 반환 : 띄어쓰기 들어가서 못찾음
SELECT FIND_IN_SET('수', '월화수목금토');           # 0 반환 : 콤마로 구분안되어있어서 못찾음

문자열 대소문자 변환 및 공백제거

No함수명설명
13LCASE(문자열 \ 변수 \ 열)- 영문 문자열에 대해 소문자로 변환해줍니다.
14LOWER(문자열 \ 변수 \ 열)- 영문 문자열에 대해 소문자로 변환해줍니다.
15UCASE(문자열 \ 변수 \ 열)- 영문 문자열에 대해 대문자로 변환해줍니다.
16UPPER(문자열 \ 변수 \ 열)- 영문 문자열에 대해 대문자로 변환해줍니다.
17LTRIM(문자열 \ 변수 \ 열)- 문자열의 좌측 공백 제거
18RTRIM(문자열 \ 변수 \ 열)- 문자열의 우측 공백 제거
19TRIM(문자열 \ 변수 \ 열)- 문자열의 좌우 공백 제거
- 문자열 사이사이에 있는 공백은 제거하지 못합니다. (제거하려면 REPLACE 함수 이용필요)
-- 13. LCASE(문자열 | 변수 | 열) : 영문 문자열에 대해 소문자로 변환해줍니다.
-- 14. LOWER(문자열 | 변수 | 열) : 위와 동일                       
SELECT LCASE(TitlE), LOWER(TitlE);              # 반환 : title, title

-- 15. UCASE(문자열 | 변수 | 열) : 영문 문자열에 대해 대문자로 변환해줍니다.
-- 16. UPPER(문자열 | 변수 | 열) : 위와 동일
SELECT UCASE(TitlE), UPPER(TitlE);             # 반환 : TITLE, TITLE

-- 17. LTRIM(문자열 | 변수 | 열) : 문자열의 좌측 공백 제거
-- 18. RTRIM(문자열 | 변수 | 열) : 문자열의 우측 공백 제거
-- 19. TRIM(문자열 | 변수 | 열) : 문자열의 좌우 공백 제거
# 문자열 사이사이에 있는 공백은 제거하지 못합니다. (제거하려면 REPLACE 함수 이용필요)
SET @str = '       빈 문자열    ';
SELECT LTRIM(@str);                           # 반환 : 빈 문자열    
SELECT RTRIM(@str);                           # 반환 :        빈 문자열
SELECT TRIM(@str);                            # 반환 : 빈 문자열

문자열 길이 및 바이트 수

No함수명설명
20CHAR_LENGTH(문자열 \ 변수 \ 열)- 문자열 내 문자수를 반환합니다. (공백포함)
21CHARACTER_LENGTH(문자열 \ 변수 \ 열)- 문자열 내 문자수를 반환합니다. (공백포함)
22LENGTH(문자열 \ 변수 \ 열)- 문자열의 바이트수를 반환합니다.
- (MariaDB)한 글자 당 영문,숫자 1바이트 / 한글,한문 3바이트 / 이모지 4바이트
23LENGTHB(문자열 \ 변수 \ 열)- 문자열의 바이트수를 반환합니다.
- (MariaDB)한 글자 당 영문,숫자 1바이트 / 한글,한문 3바이트 / 이모지 4바이트
-- 20. CHAR_LENGTH(문자열 | 변수 | 열) :  문자열 내 문자수를 반환합니다. (공백포함)
-- 21. CHARACTER_LENGTH(문자열 | 변수 | 열) : 위와 동일
SELECT CHAR_LENGTH('홍길동');                  # 반환 : 3
SELECT CHAR_LENGTH('Senior Engineer');        # 반환 : 15
SELECT CHAR_LENGTH('데이터베이스SQL\u2506');    # 반환 : 14
SELECT CHAR_LENGTH(' MariaDB');               # 반환 : 8
SELECT CHARACTER_LENGTH(' MariaDB');          # 반환 : 8  

-- 22. LENGTH(문자열 | 변수 | 열) : 문자열의 바이트수를 반환합니다.
-- 23. LENGTHB(문자열 | 변수 | 열) : 위와동일
# 한 글자 당 영문,숫자 1바이트 / 한글,한문 3바이트 / 이모지 4바이트
SELECT LENGTH('홍길동');                       # 반환 : 9
SELECT LENGTH('Senior Engineer');             # 반환 : 15
SELECT LENGTHB(' MariaDB');                   # 반환 : 8

문자열 결합

No함수명설명
24CONCAT(문자열 \ 변수 \ 열, 문자열 \ 변수 \ 열,,,)-입력된 문자열을 합쳐서 하나의 문자열로 반환합니다.
25CONCAT_WS(구분문자, 문자열 \ 변수 \ 열, 문자열 \ 변수 \ 열,,,)- 입력된 문자열을 구분문자로 구분하여 하나의 문자열로 반환합니다.
-- 24. CONCAT(문자열 | 변수 | 열, 문자열 | 변수 | 열,,,) : 입력된 문자열을 합쳐서 하나의 문자열로 반환합니다.
# SQL에서는 '문자열 + 문자열'로 합칠 수 없어 CONCAT() 함수를 이용해야합니다.
SELECT CONCAT('문자열A', '문자열B');           # 반환 : 문자열A문자열B

-- 25. CONCAT_WS(구분문자, 문자열 | 변수 | 열, 문자열 | 변수 | 열,,,) : 입력된 문자열을 구분문자로 구분하여 하나의 문자열로 반환합니다.
SELECT CONCAT_WS('|','문자열A', '문자열B', '문자열C')     # 반환 : 문자열A | 문자열B | 문자열C

문자열 추가/삭제/교체/반전 및 공백함수

No함수명설명
26LPAD(문자열 \ 변수 \ 열, 길이, (생략가능) 패딩 문자열)- 좌측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수
- 패딩 문자열 미입력 시 공백문자가 채워집니다.
- 대상 문자열보다 짧은 길이 입력 시 해당 길이 만큼만 표시됩니다.
27RPAD(문자열 \ 변수 \ 열, 길이, (생략가능) 패딩 문자열)- 우측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수
- 패딩 문자열 미입력 시 공백문자가 채워집니다.
- 대상 문자열보다 짧은 길이 입력 시 해당 길이 만큼만 표시됩니다.
28INSERT(문자열 \ 변수 \ 열, 시작위치, 길이, 추가할 문자열)- 문자열에서 시작위치부터 입력받은 개수만큼 삭제 후 입력받은 문자로 삽입한 결과를 반환합니다.
29REPLACE(문자열 \ 변수 \ 열, 문자열1, 문자열2)대상에서 문자열1을 찾아 문자열2로 교체합니다.
30REPEAT(문자열 \ 변수 \ 열, 반복횟수)- 주어진 문자열을 주어진 반복횟수만큼 반복한 문자열을 만들어 반환합니다.
31REVERSE(문자열 \ 변수 \ 열)- 문자열의 좌우 바꿉니다.
32SPACE(숫자)- 공백을 입력한 숫자 만큼 만들어 줍니다.
-- 26. LPAD(문자열 | 변수 | 열, 길이, (생략가능) 패딩 문자열) : 좌측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수
-- 27, RPAD(문자열 | 변수 | 열, 길이, (생략가능) 패딩 문자열) : 우측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수
# 패딩 문자열 미입력 시 공백문자가 채워집니다.
SELECT LPAD('문자열', 5);                      # 결과 :   문자열
SELECT LPAD('문자열', 5, '@');                 # 결과 : @@문자열
SELECT LPAD('문자열', 2, '@');                 # 결과 : 문자
SELECT RPAD('문자열', 5);                      # 결과 : 문자열  
SELECT RPAD('문자열', 5, '@');                 # 결과 : 문자열@@

-- 28. INSERT(문자열 | 변수 |, 시작위치, 길이, 추가할 문자열) : 문자열에서 시작위치부터 입력받은 개수만큼 삭제 후 입력받은 문자로 삽입한 결과를 반환합니다.
# INSERT문과 완전히 다른 내장함수
# 삭제만 하고싶을 때는 추가할 문자열에 '' 공백 입력하면 됩니다.
SELECT INSERT('열심히 살자!', 5,3,'해야지...');  # 결과 : 열심히 해야지...
SELECT INSERT('열심히 살자!', 5,3,'');          # 결과 : 열심히

-- 29. REPLACE(문자열 | 변수 | 열, 문자열1, 문자열2) : 대상에서 문자열1을 찾아 문자열2로 교체합니다.
# 문자열1은 대/소문자를 구분해서 찾습니다.
# 대상에서 문자열1을 없는 경우 대상을 원래 그대로 반환합니다.
SELECT REPLACE('나는 Babo다', 'Babo', '바보');  # 결과 : 나는 바보다
SELECT REPLACE('나는 Babo다', 'babo', '바보');  # 결과 : 나는 Babo다
SELECT REPLACE('나는 Babo다', 'Babo다', '');    # 결과 : 나는 

-- 30. REPEAT(문자열 | 변수 | 열, 반복횟수) : 주어진 문자열을 주어진 반복횟수만큼 반복한 문자열을 만들어 반환합니다.
SELECT REPEAT('바보',3);                       # 결과 : 바보바보바보

-- 31. REVERSE(문자열 | 변수 | 열) : 문자열의 좌우 바꿔 반환합니다.
SELECT REVERSE('나는 바보다!');                 # 결과 : !다보바 는나

-- 32. SPACE(숫자) : 공백을 입력한 숫자 만큼 만들어 줍니다.
SELECT SPACE(1);                              # 결과 : 
SELECT CONCAT('나는', SPACE(10), '바보다');     # 결과 : 나는          바보다

문자열로 변환 / 문자열을 변환

No함수명설명
33FORMAT(수치형 데이터, 소수점 아래 자리수, (생략가능) 로케일)- 수치형 데이터를 출력을 위해 문자열 형식으로 반환합니다.
- 문자열로 변환할 때 표시할 소수점 아래 자리수를 입력합니다. (바로 아래자리에서 반올림)
- 로케일(지역)을 입력해서 해당 지역에 맞는 표시방법으로 표시할 수 있습니다.
34ASCII(문자열 \ 변수 \ 열)아스키코드로 변환 합니다. (문자 여러개 넣으면 처음 넣은 문자만 ASCII로 변환합니다.)
35CHR(숫자)입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다.
36CHAR(숫자, 숫자,,,)- 입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다.
- ,(쉼표)로 구분해서 값을 여러개 넣을 수 있습니다.
37HEX(문자열 \ 변수 \ 열)- 문자를 헥사코드로 변환 합니다.
38UNHEX(헥사코드)- 헥사코드를 문자코드로 변환 합니다.
-- 33. FORMAT(수치형 데이터, 소수점 아래 자리수, (생략가능) 로케일) : 수치형 데이터를 출력을 위해 문자열 형식으로 반환합니다. 
# 문자열로 변환할 때 표시할 소수점 아래 자리수를 입력합니다. (바로 아래자리에서 반올림)
# 로케일(지역)을 입력해서 해당 지역에 맞는 표시방법으로 표시할 수 있습니다.
SELECT FORMAT(12345.6289, 2);           # 결과 : 12,345.63
SELECT FORMAT(12345.6289, 2, 'es_ES');  # 결과 : 12.345,63
#에스파냐는 12,345.00이 아니라 12.345,00입니다!

-- 34. ASCII(문자열 | 변수 | 열) : 아스키코드로 변환 (문자 여러개 넣으면 처음 넣은 문자만 ASCII로 변환함)
SELECT ASCII('A');                     # 결과 : 65
SELECT ASCII('a');                     # 결과 : 97

-- 35. CHR(숫자) : 입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다.
-- 36. CHAR(숫자, 숫자,,,) : 위와 동일 단, 값을 여러개 넣을 수 있음! 그것만 다름
SELECT CHR(65), CHR(48);              # 결과 : A, 0
SELECT CHAR(65, 48, 66, 67);          # 결과 : A0BC

-- 37. HEX(문자열 | 변수 | 열) : 문자를 헥사코드로 변환 합니다.
-- 38. UNHEX(헥사코드) : 헥사코드를 문자코드로 변환 합니다.
SELECT HEX('AB');                     # 결과 : 4142 
SELECT UNHEX('4142');                 # 결과 : AB

형(TYPE) 변환

타입을 바꿔주는 함수입니다.

No함수명설명
39CAST(값 \ 변수 \ 열 AS 데이터유형)입력된 인자를 입력한 데이터 유형으로 변경합니다.
40CONVERT(값 \ 변수 \ 열, 데이터유형)입력된 인자를 입력한 데이터 유형으로 변경합니다.
-- 39. CAST(값 | 변수 | 열 AS 데이터유형) : 입력된 인자를 입력한 데이터 유형으로 변경합니다.
-- 40. CONVERT(값 | 변수 | 열, 데이터유형) : 위와 동일
SELECT CAST(123 AS VARCHAR(20));          #반환 : 123
SELECT CONVERT(123,VARCHAR(20));          #반환 : 123
SELECT 123 + 123;                         #반환 : 243
SELECT CONCAT(CAST(123 AS VARCHAR(20)),CAST(123 AS VARCHAR(20)));    #반환 : 123123

💡 명시적 형변환 vs 묵시적 형변환

  • 명시적 형변환
    위 처럼 CAST(), CONVERT() 함수 또는 타입에 따라 to_char(), DATE_FORMAT() 등으로 명시적으로 형변환을 하는 경우를 말합니다.
  • 묵시적 형변환
    상황에 따라 자동으로 데이터 형 변환이 이루어지는 것 입니다.
# 상황 1 : 문자열 내 숫자가 담겨있는 경우 수치형으로 자동 형변환되서 계산 됨
SELECT '100' + '200';                     # 결과 : 300
SELECT '100' = 100;                       # 결과 : 1(true)
# 자동 형변환 발생 안하려면 CONCAT으로 써야함
SELECT CONCAT('100', '200');              # 결과 : 100200 

# 상황 2 : 숫자 + 문자(문자로 시작하는)일때는 숫자가 아닌건 전부 0 취급 함(MariaDB, MySQL 특징)
SELECT 100 + 'A100', 200 + 'B300A';       # 결과 : 100, 200
SELECT 'A100' + 100 , 'B300A' + 200;      # 결과 : 100, 200
SELECT 100 * 'A100', 200 / 'B300A';       # 결과 : 0, NULL
SELECT 100 = 'A100', 200 = 'B300A';       # 결과 : 0(false), 0(false)

# 상황 3 : 숫자 + 문자(숫자로 시작하는)일 때는 문자에서 숫자 부분만 갖고와서 계산 함
SELECT 100 + '100A', 200 + '300BA';       # 결과 : 200, 500
SELECT '100A' + 100 , '300BA' + 200;      # 결과 : 200, 500
SELECT 100 * '100A', 200 / '300BA';       # 결과 : 1000, 0.6666(생략)
SELECT 100 = '100A', 200 = '300BA';       # 결과 : 1(true), 0(false) 

# 상황 4 : 시간/날짜 유형의 경우 수치형으로 변환되어 계산됩니다.
SELECT TIME'10:20:30' + 150;              # 결과 : 102180
SELECT TIME'10:20:30' + '문자';           # 결과 : 102030
SELECT DATE'24-02-20' + 150;             # 결과 : 20240370
SELECT DATE'24-02-20' + '문자';           # 결과 : 20240220

# 상황 5 : 수치형 중 FLOAT, DOUBLE형을 포함하는 경우 결과는 해당 형이 됩니다.
# 문자형 내 실수형이 있을 경우 DOUBLE형으로 자동 변환됩니다.
SELECT 2.2 / 3;                          # 결과 : 0.73333
SELECT '2.2' / 3;                        # 결과 : 0.73333333(생략)

날짜&시간 함수

날짜와 시간을 연산, 결과를 문자열로 반환하는 내장 함수 입니다.

날짜 연산

No함수명설명
41ADDDATE(날짜 유형의 데이터, 증감숫자 \ INTERVAL 증감숫자 단위)특정날짜로 부터 증감숫자 만큼 양수면 더하고, 음수면 뺍니다.
42DATE_ADD(날짜 유형의 데이터, INTERVAL 증감숫자 단위)ADDDATE()와 동일하나 INTERVAL을 이용해서 작성해줘야 합니다.
43SUBDATE(날짜 유형의 데이터, 증감숫자 \ INTERVAL 증감숫자 단위)특정날짜로 부터 증감숫자 만큼 양수면 빼고, 음수면 더합니다.
44DATE_SUB(날짜 유형의 데이터, INTERVAL 증감숫자 단위)SUBDATE()와 동일하나 IINTERVAL을 이용해서 작성해줘야 합니다.
-- 41. ADDDATE(날짜 유형의 데이터, 증감숫자 | INTERVAL 증감숫자 단위) : 특정날짜로 부터 증감숫자 만큼 양수면 더하고, 음수면 뺍니다.
-- 42. DATE_ADD(날짜 유형의 데이터, INTERVAL 증감숫자 단위) : ADDDATE()와 동일하나 INTERVAL을 이용해서 작성해줘야 합니다.
SELECT ADDDATE('2024-02-18 20:48:00', 30);                 # 결과 : 2024-03-19 20:48:00
SELECT ADDDATE('2024-02-18 20:48:00', -30);                # 결과 : 2024-01-19 20:48:00
SELECT ADDDATE('2024-02-18 20:48:00', INTERVAL 2 MONTH);   # 결과 : 2024-04-18 20:48:00
SELECT ADDDATE('2024-02-18 20:48:00', INTERVAL 30 YEAR);   # 결과 : 2054-02-18 20:48:00
SELECT DATE_ADD('2024-02-18 20:48:00', INTERVAL 30 YEAR);  # 결과 : 2054-02-18 20:48:00

-- 43. SUBDATE(날짜 유형의 데이터, 증감숫자 | INTERVAL 증감숫자 단위) : 특정날짜로 부터 증감숫자 만큼 양수면 빼고, 음수면 더합니다.
-- 44. DATE_SUB(날짜 유형의 데이터, INTERVAL 증감숫자 단위) : SUBDATE()와 동일하나 IINTERVAL을 이용해서 작성해줘야 합니다.
SELECT SUBDATE('2024-02-18 20:48:00', 30);                 # 결과 : 2024-01-19 20:48:00
SELECT SUBDATE('2024-02-18 20:48:00', -30);                # 결과 : 2024-03-19 20:48:00
SELECT DATE_SUB('2024-02-18 20:48:00', INTERVAL 30 YEAR);  # 결과 : 1994-02-18 20:48:00

💡 ADDDATE(), SUBDATE()...하나로도 더하기 빼기 다 할 수 있는데 왜 나눠져있을까?
둘 중하나로도 더하기 빼기 다 쓸 수 있지만, 함수명으로 해당 함수의 기능이 명시적으로 표현되어있어서 쿼리를 읽을 때 더 직관적으로 볼 수 있도록 사용하도록 하기 위함입니다.

💡 INTERVAL 키워드 내 사용할 수 있는 단위

단위설명
YEAR연도를 증감
QUATRER분기 단위를 증감(3개월 단위)
MONTH월을 증감
WEEK주 단위로 증감
DAY날 수를 증감
HOUR시 단위를 증감
MINUTE분 단위를 증감
SECOND초 단위를 증감

현재 날짜/시간 구하기

No함수명설명
45NOW((생략가능)정확도)- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.
- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
- 표시형식 : YYYY-MM-DD HH:MM:SS
46CURRENT_TIMESTAMP((생략가능)정확도)- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.
- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
- 표시형식 : YYYY-MM-DD HH:MM:SS
47SYSDATE((생략가능)정확도)-- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.
- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
- 표시형식 : YYYY-MM-DD HH:MM:SS
48LOCALTIME((생략가능)정확도)- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.
- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
- 표시형식 : YYYY-MM-DD HH:MM:SS
49LOCALTIMESTAMP((생략가능)정확도)- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.
- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
- 표시형식 : YYYY-MM-DD HH:MM:SS
50CURDATE()- 로컬 시간에 맞춰 현재 날짜를 출력합니다.
- 표시형식 : YYYY-MM-DD
51CURRENT_DATE()- 로컬 시간에 맞춰 현재 날짜를 출력합니다.
- 표시형식 : YYYY-MM-DD
52CURTIME((생략가능)정확도)- 로컬 시간에 맞춰 현재 시간을 출력합니다.
- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
- 표시형식 : HH:MM:SS
53 CURRENT_TIME((생략가능)정확도)- 로컬 시간에 맞춰 현재 시간을 출력합니다.
- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
- 표시형식 : HH:MM:S
-- 45. NOW((생략가능)정확도) : 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다. YYYY-MM-DD HH:MM:SS
-- 46. CURRENT_TIMESTAMP((생략가능)정확도) : 위와 동일
-- 47. SYSDATE((생략가능)정확도) : 위와 동일
-- 48. LOCALTIME((생략가능)정확도) : 위와 동일
-- 49. LOCALTIMESTAMP((생략가능)정확도) : 위와 동일
SELECT NOW();                 # 결과 : 2024-02-18 21:16:43
SELECT CURRENT_TIMESTAMP();   # 결과 : 2024-02-18 21:16:43
SELECT SYSDATE();             # 결과 : 2024-02-18 21:16:43
SELECT LOCALTIMESTAMP();      # 결과 : 2024-02-18 21:16:43
SELECT LOCALTIME();           # 결과 : 2024-02-18 21:16:43
# 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
SELECT NOW(2);                # 결과 : 2024-02-18 21:16:43.94
SELECT NOW(6);                # 결과 : 2024-02-18 21:16:43.947440

-- 50. CURDATE() : 로컬 시간에 맞춰 현재 날짜를 출력합니다. YYYY-MM-DD
-- 51. CURRENT_DATE() : 위와 동일
SELECT CURDATE();             # 결과 : 2024-02-18
SELECT CURRENT_DATE();        # 결과 : 2024-02-18

-- 52. CURTIME((생략가능)정확도) : 로컬 시간에 맞춰 현재 시간을 출력합니다. HH:MM:DD
-- 53. CURRENT_TIME((생략가능)정확도) : 위와 동일
SELECT CURTIME();             # 결과 : 21:27:50
SELECT CURRENT_TIME();        # 결과 : 21:27:50
# 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
SELECT CURTIME(2);            # 결과 : 21:27:50.83
SELECT CURTIME(6);            # 결과 : 21:27:50.837833

날짜에서 원하는 부분 추출

No함수명설명
54YEAR(날짜형 데이터)- 날짜에서 연도 부분만 숫자형식으로 반환합니다.
- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.
55MONTH(날짜형 데이터)- 날짜에서 월 부분만 숫자형식으로 반환합니다.
- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.
56DAY(날짜형 데이터)- 날짜에서 일자 부분만 숫자형식으로 반환합니다.
- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.
57HOUR(날짜/시간형 데이터)- 날짜/시간 데이터에서 시간 부분만 숫자형식으로 반환합니다.
- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.
58MINUTE(날짜/시간형 데이터)- 날짜/시간 데이터에서 분 부분만 숫자형식으로 반환합니다.
- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.
59SECOND(날짜/시간형 데이터)- 날짜/시간 데이터에서 초 부분만 숫자형식으로 반환합니다.
- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.
60MICROSECOND(날짜/시간형 데이터)- 날짜/시간 데이터에서 밀리초 부분만 숫자형식으로 반환합니다.
- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.
61DATE(날짜/시간형 데이터)- 날짜/시간 데이터에서 날짜 부분만 문자열로 반환합니다.
- 표시형식 : YYYY-MM-DD
62TIME(날짜/시간형 데이터)- 날짜/시간 데이터에서 시간 부분만 문자열로 반환합니다.
- 표시형식 : HH:MM:SS
-- 54. YEAR(날짜형 데이터) : 날짜에서 연도 부분만 숫자형식으로 반환합니다.
-- 55. MONTH(날짜형 데이터) : 날짜에서 월 부분만 숫자형식으로 반환합니다.
-- 56. DAY(날짜형 데이터) : 날짜에서 일 부분만 숫자형식으로 반환합니다.
SELECT YEAR('2024-02-18 21:50:20');                     # 결과 : 2,024
SELECT MONTH('2024-02-18 21:50:20');                    # 결과 : 2
SELECT DAY('2024-02-18 21:50:20');                      # 결과 : 18
# 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요
SELECT CAST(YEAR('2024-02-18 21:50:20') as CHAR(4));    # 결과 : 2024

-- 57. HOUR(날짜/시간형 데이터) : 날짜/시간 데이터에서 시간 부분만 숫자형식으로 반환합니다.
-- 58. MINUTE(날짜/시간형 데이터) : 날짜/시간 데이터에서 분 부분만 숫자형식으로 반환합니다.
-- 59. SECOND(날짜/시간형 데이터) : 날짜/시간 데이터에서 초 부분만 숫자형식으로 반환합니다.
-- 60. MICROSECOND(날짜/시간형 데이터) : 날짜/시간 데이터에서 밀리초 부분만 숫자형식으로 반환합니다.
SELECT HOUR('2024-02-18 21:50:20');                     # 결과 : 21
SELECT MINUTE('2024-02-18 21:50:20');                   # 결과 : 50
SELECT SECOND('2024-02-18 21:50:20');                   # 결과 : 20
SELECT MICROSECOND('2024-02-18 21:50:20');              # 결과 : 0
# 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요
SELECT CAST(HOUR('2024-02-18 21:50:20') AS VARCHAR(2)); # 결과 : 21

-- 61. DATE(날짜/시간형 데이터) : 날짜/시간 데이터에서 날짜 부분만 문자열로 반환합니다. YYYY-MM-DD
-- 62. TIME(날짜/시간형 데이터) : 날짜/시간 데이터에서 시간 부분만 문자열로 반환합니다. HH:MM:SS
SELECT DATE('2024-02-18 21:50:20');    # 결과 : 2024-02-18
SELECT TIME('2024-02-18 21:50:20');    # 결과 : 21:50:20 

날짜 정보 확인하기

No함수명설명
63DAYOFYEAR(날짜형 데이터)- 기준일이 해당년도가 시작되고 며칠이 지났는지 보여주는 함수
64DAYOFMONTH(날짜형 데이터)- 기준일이 해당월이 시작되고 며칠이 지났는지 보여주는 함수
65DAYOFWEEK(날짜형 데이터)- 기준일이 해당주가 시작되고 며칠이 지났는지 보여주는 함수
- 주의 경우 일요일부터 시작(1) ~ 토요일 종료(7)
66MONTHNAME(날짜형 데이터)- 기준일의 월 풀네임을 표시해줍니다.
67LAST_DAY(날짜형 데이터)- 주어진 날짜 데이터에 해당하는 달의 마지막 일자를 문자열로 반환합니다.
68QUARTER(날짜형 데이터)- 입력한 날짜가 몇번째 분기에 있는가를 보여주는 함수
-- 63. DAYOFYEAR(날짜형 데이터) : 기준일이 해당년도가 시작되고 며칠이 지났는지 보여주는 함수
-- 64. DAYOFMONTH(날짜형 데이터) : 기준일이 해당월이 시작되고 며칠이 지났는지 보여주는 함수
-- 65. DAYOFWEEK(날짜형 데이터) : 기준일이 해당주가 시작되고 며칠이 지났는지 보여주는 함수
# 주의 경우 일요일부터 시작(1) ~ 토요일 종료(7)
SELECT DAYOFYEAR('2024-02-18');     # 결과 : 49
SELECT DAYOFMONTH('2024-02-18');    # 결과 : 18
SELECT DAYOFWEEK('2024-02-18');     # 결과 : 1

-- 66. MONTHNAME(날짜형 데이터) : 기준일의 월 풀네임을 표시해줍니다.
SELECT MONTHNAME('2024-02-18');    # 결과 : Februrary

-- 67. LAST_DAY(날짜형 데이터) : 주어진 날짜 데이터에 해당하는 달의 마지막 일자를 문자열로 반환합니다.
SELECT LAST_DAY('2024-02-18');     # 결과 : 2024-02-29

-- 68. QUARTER : 입력한 날짜가 몇번째 분기에 있는가를 보여주는 함수
SELECT QUARTER('2024-10-01');      # 결과 : 4

두 날짜/시간 차이 구하기

No함수명설명
69DATEDIFF(날짜형 데이터1, 날짜형 데이터2)- 첫번째 인자에서 두번째 인자를 빼서 날짜 차이 계산해주는 함수
- 두 인자의 표현식이 같아야합니다.
70TIMEDIFF(날짜시간 데이터1 \ 데이터1, 날짜시간 데이터2 \ 시간 데이터2)- 첫번째 인자에서 두번째 인자를 빼서 시간 차이 계산해주는 함수
- 두 인자의 표현식이 같아야하고, 두 인자 모두 시간이거나 둘다 날짜시간이어야합니다.
-- 69. DATEDIFF(날짜형 데이터1, 날짜형 데이터2) : 첫번째 인자에서 두번째 인자를 빼서 날짜 차이 계산해주는 함수
-- 70. TIMEDIFF(날짜시간 데이터1 | 데이터1, 날짜시간 데이터2 | 시간 데이터2) : 첫번째 인자에서 두번째 인자를 빼서 시간 차이 계산해주는 함수
# 표현식이 같아야하고, TIMEDIFF()의 경우 두 인자 모두 시간이거나 둘다 날짜시간이어야함.
SELECT DATEDIFF('2024-02-13', '2023-02-13');                     # 결과 : 365
SELECT TIMEDIFF('23:00:20','02:20:20');                          # 결과 : 20:40:00
SELECT TIMEDIFF('2024-02-13 23:00:20','2023-02-13 00:20:20');    # 결과 : 838:59:59

날짜데이터 생성

No함수명설명
71MAKEDATE(년도 \ 날짜형 데이터, 일자)- 입력한 년도 또는 입력한 날짜의 년도가 시작하고 입력한 일자가 지난 시점을 계산해서 날짜를 반환해줍니다.
- 날짜형 데이터를 넣을경우 해당 날짜로부터가 아니라 해당 날짜의 연도가 시작한 뒤로 부터로 계산된다는 점을 주의해야합니다.
72MAKETIME(시, 분, 초)- 입력한 시간, 분, 초로 시간을 만들어줍니다.
-- 71. MAKEDATE(년도 | 날짜형 데이터, 일자) : 입력한 년도 또는 입력한 날짜의 년도가 시작하고 입력한 일자가 지난 시점을 계산해서 날짜를 반환해줍니다.
-- 72. MAKETIME(시, 분, 초) : 입력한 시간, 분, 초로 시간을 만들어줍니다.
# MAKEDATE()에 날짜형 데이터를 넣을경우 해당 날짜로부터가 아니라 해당 날짜의 연도가 시작한뒤로부터로 계산된다는 점을 주의해야합니다.
SELECT MAKEDATE(2024, 60);          # 결과 : 2024-02-29
SELECT MAKEDATE('2024-02-18', 60);  # 결과 : 2024-02-29
SELECT MAKETIME(15, 35, 30);        # 결과 : 15:35:30

💡 MAKEDATE()와 ADDDATE()

  • MAKEDATE() : 입력한 년도 또는 입력한 날짜의 년도가 시작하고 입력한 일자가 지난 시점을 계산해서 날짜를 반환해줍니다.
  • ADDDATE() : 특정날짜로 부터 증감숫자 만큼 양수면 더하고, 음수면 뺍니다.
    위 두 함수의 경우 비슷한 용도로 사용할 수 있습니다.
    다만, 날짜를 더한다의 개념이 조금 달라 그 부분을 주의해야합니다.
SELECT MAKEDATE(2024, 60);           # 결과 : 2024-02-29
SELECT ADDDATE('2024-01-01', 60);    # 결과 : 2024-03-01
SELECT ADDDATE('2024-01-01', 59);    # 결과 : 2024-02-29
# MAKEDATE의 경우 해당 년도로부터 입력한 일자만큼 지난 날짜를 반환해주고, 
# ADDDATE는 입력한 일자로 부터 입력한 일자를 더한 날짜를 반환해준다는 점이 다릅니다.

날짜 형식지정 출력

No함수명설명
73DATE_FORMAT(날짜형 데이터, 형식문자, (생략가능) 로케일)- 입력된 날짜의 포맷을 지정해서 출력해줍니다.
- 3번째 인자로 로케일을 작성할 경우 해당 나라에 맞는 날짜 형식으로 변환해줍니다.
74to_char(날짜유형의 데이터 \ 시간유형의 데이터, 형식 문자열)- 날짜/시간을 원하는 포맷으로 바꿔서 출력합니다.
- 날짜/시간 관련 포맷은 아래 예시 부분 참고
-- 73. DATE_FORMAT(날짜형 데이터, 형식문자, (생략가능) 로케일) : 입력된 날짜의 포맷을 지정해서 출력해줍니다. 
# 3번째 인자로 로케일을 작성할 경우 해당 나라에 맞는 날짜 형식으로 변환해줍니다.
# 한국의 경우 'ko_KO'
SELECT DATE_FORMAT('2024-02-18', '%Y년 %b %d 일', 'ko_KR');   # 결과 : 2024년 2월 18일
SELECT DATE_FORMAT('2024-02-18', '%Y/%m/%d');                # 결과 : 2024/02/18

-- 74. to_char((날짜유형의 데이터 \ 시간유형의 데이터, 형식 문자열) : 날짜/시간을 원하는 포맷으로 바꿔서 출력합니다.
SELECT to_char('2024-02-18 19:23:00', 'YY-MM-DD');   # 결과 : 24-02-18
SELECT to_char('2024-02-18 19:23:00', 'DD-MONTH-YYYY (DY)');  # 결과 : 18-February-2024 (Sun)

💡 to_char()에서 사용할 수 있는 날짜/시간 관련 형식문자

형식설명표시예시
YYYY- 연도를 4자리로 표현2024
YYY- 연도를 3자리로 표현024
YY- 연도를 2자리로 표현24
RRRR- 연도를 4자리로 표현2024
RR- 연도를 2자리로 표현024
MM- 월을 두 자리 숫자로 표현01 ~ 12
MON- 월 이름을 약자로 표현Jan ~ Dec / 1월 ~ 12월
MONTH- 월 이름을 풀네임으로 표현January ~ December / 일월 ~ 십이월
DD- 일을 두 자리 숫자로 표현01 ~ 31
DY- 요일을 약자로 표현Mon ~ Sun / 월 ~ 일
DAY- 요일을 풀네임으로 표현Monday ~ Sunday / 월요일 ~ 일요일
HH, HH12- 시간을 2자리로 12시간 단위로 표현00 ~ 12
HH24- 시간을 2자리로 24시간 단위로 표현00 ~ 24
MI- 분을 2자리로 표현00 ~ 59
SS- 초를 2자리로 표현00 ~ 59

💡 DATE_FORMAT()에서 사용할 수 있는 형식문자

형식설명표시예시
%Y- 연도를 4자리 숫자로 표현합니다.2024
%y- 연도를 2자리 숫자로 표현합니다.24
%X- 연도를 4자리 숫자로 표현합니다.
- 일요일을 한주의 시작으로 할 때 사용하며 %V와 함께 사용합니다.
2024
%x- 연도를 4자리 숫자로 표현합니다.
- 월요일을 한주의 시작으로 할 때 사용하며 %v와 함께 사용합니다.
2024
%b- 월 이름을 약자로 표현합니다.Jan ~ Dec / 1월 ~ 12월
%M- 월 이름을 풀네임으로 표현합니다.January ~ December / 일월 ~ 십이월
%m- 월을 2자리 숫자로 표현합니다.01~12
%c- 월을 1~2자리 숫자로 표현합니다.1~12
%U- 날짜의 주차를 2자리 숫자로 표현합니다.
- 일요일을 한주로 시작할 때 사용합니다.
01~53
%u- 날짜의 주차를 2자리 숫자로 표현합니다.
- 월요일을 한주로 시작할 때 사용합니다.
01~53
%V- 날짜의 주차를 2자리 숫자로 표현합니다.
- 일요일을 한주로 시작할 때 사용하며 %X와 함께 사용합니다.
01~53
%v- 날짜의 주차를 2자리 숫자로 표현합니다.
- 월요일을 한주로 시작할 때 사용합하며 %x와 함께 사용합니다.
01~53
%D- 일자를 서수의 형태로 표현 합니다.1st, 2nd, 3rd, 4th,,,
%d- 일자를 2자리 숫자로 표현합니다.01~31
%e- 일자를 1~2자리 숫자로 표현합니다.1~31
%j- 해당 날짜가 해당 년도에서 몇 번째 날인지 3자리 숫자로 표현합니다.001 ~ 365
%p- 오전이면 AM, 오후면 PM을 표현합니다.AM, PM
%r- 시간을 12시간 단위로 표현하고 뒤에 AM, PM까지 한번에 표시합니다.07:00:00 AM
%T- 시간을 24시간 단위로 한번에 표현합니다.19:00:00
%H- 시 단위를 24시간 범위의 2글자로 표현합니다.00 ~ 23
%h- 시 단위를 12시간 범위의 2글자로 표현합니다.00 ~ 12
%I- 시 단위를 12시간 범위의 2글자로 표현합니다.00 ~ 12
%k- 시 단위를 24시간 범위의 1~2글자로 표현합니다.0 ~ 23
%l- 시 단위를 12시간 범위의 1~2글자로 표현합니다.0 ~ 12
%i- 분 단위를 2자리 숫자로 표현 합니다.00 ~ 59
%S- 초 단위를 2자리 숫자로 표현 합니다.00 ~ 59
%s- 초 단위를 2자리 숫자로 표현 합니다.00 ~59
%f- 초 아래 단위를 6자리 숫자로 표현 합니다.000000 ~ 999999
%a요일 이름을 약자로 표현합니다.Mon ~ Sun / 월 ~ 일
%W요일 이름을 풀네임으로 표현합니다.Monday ~ Sunday / 월요일 ~ 일요일
%w요일을 숫자로 표시합니다.0(일요일) ~ 6(토요일)

수치 함수

수치 데이터를 다루어 연산, 결과를 수치 데이터로 반환하는 함수

No함수명설명
75ABS(수치형 데이터)- 입력한 수치 데이터의 절대값 반환 합니다.
76SIGN(수치형 데이터)- 주어진 수치형 데이터의 부호를 반환합니다.
- 음수 : -1 / 0 : 0 / 양수 : 1
77CEILING(수치형 데이터)- 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리)
78CEIL(수치형 데이터)- 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리)
79FLOOR(수치형 데이터)- 주어진 인자에서 주어진 실수보다 작은 수 중 가장 큰 정수를 반환합니다. (정수로 만들기 위해 소수점을 버림처리)
80TRUNCATE(수치형 데이터, 기준 소수점 자리)- 첫번쨰 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 까지만 남기고 전부 버림처리 합니다.
81ROUND(수치형 데이터, 기준 소수점 자리)- 첫번째 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 아래에서 반올림합니다.
82MOD(수치형 데이터1, 수치형 데이터2)- 첫번째 인자에서 두번째 인자를 나눈 후 나머지를 반환합니다.
- 수치형 데이터1 MOD 수치형 데이터2 로도 사용할 수 있습니다.
83POW(수치형 데이터1, 수치형 데이터2)- 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다.
84POWER(수치형 데이터1, 수치형 데이터2)- 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다.
85SQRT(수치형 데이터)- 입력된 값의 루트값을 계산하여 반환해 줍니다.
86PI()- 원주율
87GREATEST(값1, 값2,,,)- 인자 중 가장 큰 값을 구하는 함수 입니다.
- 개별값을 콤마로 구분해서만 인자로 입력할 수 있습니다.
88LEAST(값1, 값2,,,)- 인자 중 가장 작은 값을 구하는 함수
- 개별값을 콤마로 구분해서만 인자로 입력할 수 있습니다.
89DEGREES(수치형 데이터)- 주어진 값을 라디안 값으로 간주하여 각도값으로 반환합니다.
90RADIANS(수치형 데이터)- 주어진 값을 각도로 간주하여 라디안값으로 반환합니다.
91RAND((생략가능)숫자)- 0~1에서 랜덤한 난수생성합니다.
- 아무런 인자도 없이 실행시, 실행할 떄 마다 다른 난수가 생성됩니다.
- 인자를 전달할 경우 해당 인자로 호출할 때는 처음 나온 난수 결과가 동일하게 나옵니다.
-- 75. ABS(수치형 데이터) : 입력한 수치 데이터의 절대값 반환 합니다.
SELECT ABS(-50);                 # 결과 : 50

-- 76. SIGN(수치형 데이터) : 주어진 수치형 데이터의 부호를 반환합니다. 
# 음수 : -1 / 0 : 0 / 양수 : 1
SELECT SIGN(-10);                # 결과 : -1
SELECT SIGN(0);                  # 결과 : 0
SELECT SIGN(100);                # 결과 : 1

-- 77. CEILING(수치형 데이터) : 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리)
-- 78. CEIL(수치형 데이터) : 위와 동일
SELECT CEILING(70.89);          # 결과 : 71
SELECT CEILING(-70.89);         # 결과 : -70
SELECT CEIL(70.21);             # 결과 : 71
SELECT CEIL(-70.21);            # 결과 : -70

-- 79. FLOOR(수치형 데이터) : 주어진 인자에서 주어진 실수보다 작은 수 중 가장 큰 정수를 반환합니다. (정수로 만들기 위해 소수점을 버림처리)
SELECT FLOOR(70.89);           # 결과 : 70
SELECT FLOOR(-70.89);          # 결과 : -71

-- 80. TRUNCATE(수치형 데이터, 기준 소수점 자리) : 첫번쨰 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 까지만 남기고 전부 버림처리
SELECT TRUNCATE(70.89, 1);     # 결과 : 70.8
SELECT TRUNCATE(-70.89, 1);    # 결과 : -70.8

-- 81. ROUND(수치형 데이터, 기준 소수점 자리) : 첫번째 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 아래에서 반올림합니다.
SELECT ROUND(70.89, 1);        # 결과 : 70.9   
SELECT ROUND(-70.89, 1);       # 결과 : -70.9

-- 82. MOD(수치형 데이터1, 수치형 데이터2) : 첫번째 인자에서 두번째 인자를 나눈 후 나머지를 반환합니다. 
# 수치형 데이터1 MOD 수치형 데이터2 로도 사용할 수 있습니다.
SELECT MOD(7,4);              # 결과 : 3
SELECT 7 MOD 4;               # 결과 : 3

-- 83. POW(수치형 데이터1, 수치형 데이터2) : 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다.
-- 84. POWER(수치형 데이터1, 수치형 데이터2) : 위와 동일
SELECT POW(2,3);             # 결과 : 8
SELECT POWER(2,3);           # 결과 : 8

-- 85. SQRT(수치형 데이터) : 입력된 값의 루트값을 계산하여 반환해 줍니다.
# 인자가 음수면 NULL을 반환해줍니다.
SELECT SQRT(9);             # 결과 : 3

-- 86. PI() : 원주율
SELECT PI();
SELECT PI() + 0.00000000000; # 원주율의 원하는 자리수까지 0.000....을 더해서 구할 수 있음

-- 87. GREATEST(값1, 값2,,,) : 가장 큰 값을 구하는 함수
-- 88. LEAST(값1, 값2,,,) : 가장 작은 값을 구하는 함수
# 콤마로 구분되어있는 개별 값이 들어올때만 쓸수있어서 MIN(), MAX()를 더 많이 활용합니다.
SELECT GREATEST(30, 10, 5, 40);   # 결과 : 40
SELECT LEAST(30, 10, 5, 40);      # 결과 : 5

-- 89. DEGREES(수치형 데이터) : 주어진 값을 라디안 값으로 간주하여 각도값으로 반환합니다.
-- 90. RADIANS(수치형 데이터) : 주어진 값을 각도로 간주하여 라디안값으로 반환합니다.
SELECT DEGREES(PI());             # 결과 : 180
SELECT RADIANS(180);              # 결과 : 3.14(생략)

-- 91. RAND((생략가능)숫자) : 0~1에서 랜덤한 난수생성합니다.
# 아무런 인자도 없이 실행시, 실행할 떄 마다 다른 난수가 생성됩니다.
# 인자를 전달할 경우 해당 인자로 호출할 때는 처음 나온 난수 결과가 동일하게 나옵니다.
SELECT RAND();                   # 결과 : 0.87(생략)
SELECT RAND();                   # 결과 : 0.18(생략)
SELECT RAND(1);                  # 결과 : 0.40(생략)
SELECT RAND(1);                  # 결과 : 0.40(생략)
# 실제 테스트해보면 위 값과는 다르나 같은 인자로 생성한 난수는 처음 나온 난수값으로 계속 동일하게 나오는것을 확인할 수 있을겁니다!

참고

MariaDB로 따라 하며 배우는 SQL프로그래밍 데이터베이스 기초에서 실무까지 - 나익수, 서연경 지음
위 책을 공부하며 작성하고 있습니다!

profile
개발자를 꿈꾸는 병아리 (블로그 이전 준비중 입니다.)

0개의 댓글