일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- abstract
- array
- ArrayList
- Class
- collection
- database
- db
- DDL
- default
- DML
- Exception
- Generic
- HashSet
- Interface
- Java
- Java 입문
- java 자료형
- java 클래스
- JavaBean
- javabeans
- JAVA의 특징
- LinkedList
- linkedset
- list
- mariadb
- Private
- protected
- public
- RuntimeException
- set
Archives
- Today
- Total
GeehDev
[MariaDB] 내장 함수① - 문자/시간/수치 관련 본문
728x90
반응형
velog에서 이관해온 글
함수
특정 기능을 수행하는 작은 프로그램으로 다양한 프로그래밍 언어에서 사용되는 개념입니다.
SQL에서도 해당 개념을 사용하며 다양한 내장 함수를 제공하고 있어 이를 이용할 수 있습니다.
함수명(인자, 인자,,,)
형식으로 사용할 수 있습니다.
인자로 넣어야하는 값들은 함수마다 다르니 아래의 MariaDB에서 주로 사용하는 함수 리스트를 보고 활용해보세요!
내장함수의 경우 양이 많아 두 개로 나눠서 작성했습니다.
➡️ MariaDB 내장 함수② - 제어흐름/정보 관련
문자 관련 함수
문자열을 다루는 내장 함수입니다! 가장 많이 사용됩니다.
문자열 자르기
NO | 함수명 | 설명 |
1 | LEFT(문자열 \ 변수 \ 열, 문자수) |
- 문자열의 왼쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다. - 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다. |
2 | RIGHT(문자열 \ 변수 \ 열, 문자수) |
- 문자열의 오른쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다. - 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다. |
3 | MID(문자열 \ 변수 \ 열, 시작위치, 문자수) |
- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다. - 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다. - 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다. |
4 | SUBSTRING(문자열 \ 변수 \ 열, 시작위치, 문자수) |
- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다. - 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다. - 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다. |
5 | SUBSTR(문자열 \ 변수 \ 열, 시작위치, 문자수) |
- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다. - 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다. - 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다. |
6 | SUBSTRING_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 | 함수명 | 설명 |
7 | INSTR(문자열 \ 변수 \ 열, 부분 문자열) | - 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다. - 해당 부분 문자열이 없다면 0을 반환합니다. - 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다. |
8 | POSITION(부분 문자열 IN 문자열 \ 변수 \ 열) | - 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다. - 해당 부분 문자열이 없다면 0을 반환합니다. - 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다. |
9 | LOCATE(부분 문자열, 문자열 \ 변수 \ 열, (생략가능) 시작위치) | - 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다. - 시작위치는 생략가능하며, 생략 시 문자의 첫번째위치부터 찾고, 지정해줄 시 입력한 위치부터 부분문자열을 찾습니다. - 해당 부분 문자열이 없다면 0을 반환합니다. |
10 | ELT(정수, 문자열 목록(값, 값2,,,)) | - 주어진 문자열 목록에서 입력된 정수번째 값을 리턴해줍니다. - 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다. |
11 | FIELD(찾을 값, 문자열 목록(값1, 값2,,,)) | - 주어진 문자열 목록에서 찾을 값의 위치를 반환해줍니다. - 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다. |
12 | FIELD_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 | 함수명 | 설명 |
13 | LCASE(문자열 \ 변수 \ 열) |
- 영문 문자열에 대해 소문자로 변환해줍니다. |
14 | LOWER(문자열 \ 변수 \ 열) |
- 영문 문자열에 대해 소문자로 변환해줍니다. |
15 | UCASE(문자열 \ 변수 \ 열) |
- 영문 문자열에 대해 대문자로 변환해줍니다. |
16 | UPPER(문자열 \ 변수 \ 열) |
- 영문 문자열에 대해 대문자로 변환해줍니다. |
17 | LTRIM(문자열 \ 변수 \ 열) |
- 문자열의 좌측 공백 제거 |
18 | RTRIM(문자열 \ 변수 \ 열) |
- 문자열의 우측 공백 제거 |
19 | TRIM(문자열 \ 변수 \ 열) |
- 문자열의 좌우 공백 제거 - 문자열 사이사이에 있는 공백은 제거하지 못합니다. (제거하려면 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 | 함수명 | 설명 |
20 | CHAR_LENGTH(문자열 \ 변수 \ 열) | - 문자열 내 문자수를 반환합니다. (공백포함) |
21 | CHARACTER_LENGTH(문자열 \ 변수 \ 열) | - 문자열 내 문자수를 반환합니다. (공백포함) |
22 | LENGTH(문자열 \ 변수 \ 열) | - 문자열의 바이트수를 반환합니다. - (MariaDB)한 글자 당 영문,숫자 1바이트 / 한글,한문 3바이트 / 이모지 4바이트 |
23 | LENGTHB(문자열 \ 변수 \ 열) | - 문자열의 바이트수를 반환합니다. - (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 | 함수명 | 설명 |
24 | CONCAT(문자열 \ 변수 \ 열, 문자열 \ 변수 \ 열,,,) |
-입력된 문자열을 합쳐서 하나의 문자열로 반환합니다. |
25 | CONCAT_WS(구분문자, 문자열 \ 변수 \ 열, 문자열 \ 변수 \ 열,,,) |
- 입력된 문자열을 구분문자로 구분하여 하나의 문자열로 반환합니다. |
-- 24. CONCAT(문자열 | 변수 | 열, 문자열 | 변수 | 열,,,) : 입력된 문자열을 합쳐서 하나의 문자열로 반환합니다.
# SQL에서는 '문자열 + 문자열'로 합칠 수 없어 CONCAT() 함수를 이용해야합니다.
SELECT CONCAT('문자열A', '문자열B'); # 반환 : 문자열A문자열B
-- 25. CONCAT_WS(구분문자, 문자열 | 변수 | 열, 문자열 | 변수 | 열,,,) : 입력된 문자열을 구분문자로 구분하여 하나의 문자열로 반환합니다.
SELECT CONCAT_WS('|','문자열A', '문자열B', '문자열C') # 반환 : 문자열A | 문자열B | 문자열C
문자열 추가/삭제/교체/반전 및 공백함수
NO | 함수명 | 설명 |
26 | LPAD(문자열 \ 변수 \ 열, 길이, (생략가능) 패딩 문자열) | - 좌측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수 - 패딩 문자열 미입력 시 공백문자가 채워집니다. - 대상 문자열보다 짧은 길이 입력 시 해당 길이 만큼만 표시됩니다. |
27 | RPAD(문자열 \ 변수 \ 열, 길이, (생략가능) 패딩 문자열) | - 우측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수 - 패딩 문자열 미입력 시 공백문자가 채워집니다. - 대상 문자열보다 짧은 길이 입력 시 해당 길이 만큼만 표시됩니다. |
28 | INSERT(문자열 \ 변수 \ 열, 시작위치, 길이, 추가할 문자열) | - 문자열에서 시작위치부터 입력받은 개수만큼 삭제 후 입력받은 문자로 삽입한 결과를 반환합니다. |
29 | REPLACE(문자열 \ 변수 \ 열, 문자열1, 문자열2) | 대상에서 문자열1을 찾아 문자열2로 교체합니다. |
30 | REPEAT(문자열 \ 변수 \ 열, 반복횟수) | - 주어진 문자열을 주어진 반복횟수만큼 반복한 문자열을 만들어 반환합니다. |
31 | REVERSE(문자열 \ 변수 \ 열) | - 문자열의 좌우 바꿉니다. |
32 | SPACE(숫자) | - 공백을 입력한 숫자 만큼 만들어 줍니다. |
-- 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 | 함수명 | 설명 |
33 | FORMAT(수치형 데이터, 소수점 아래 자리수, (생략가능) 로케일) |
- 수치형 데이터를 출력을 위해 문자열 형식으로 반환합니다. - 문자열로 변환할 때 표시할 소수점 아래 자리수를 입력합니다. (바로 아래자리에서 반올림) - 로케일(지역)을 입력해서 해당 지역에 맞는 표시방법으로 표시할 수 있습니다. |
34 | ASCII(문자열 \ 변수 \ 열) |
아스키코드로 변환 합니다. (문자 여러개 넣으면 처음 넣은 문자만 ASCII로 변환합니다.) |
35 | CHR(숫자) |
입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다. |
36 | CHAR(숫자, 숫자,,,) |
- 입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다. - ,(쉼표)로 구분해서 값을 여러개 넣을 수 있습니다. |
37 | HEX(문자열 \ 변수 \ 열) |
- 문자를 헥사코드로 변환 합니다. |
38 | UNHEX(헥사코드) |
- 헥사코드를 문자코드로 변환 합니다. |
-- 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
728x90
형(TYPE) 변환
타입을 바꿔주는 함수입니다.
NO | 함수명 | 설명 |
39 | CAST(값 \ 변수 \ 열 AS 데이터유형) | 입력된 인자를 입력한 데이터 유형으로 변경합니다. |
40 | CONVERT(값 \ 변수 \ 열, 데이터유형) | 입력된 인자를 입력한 데이터 유형으로 변경합니다. |
-- 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 | 함수명 | 설명 |
41 | ADDDATE(날짜 유형의 데이터, 증감숫자 \ INTERVAL 증감숫자 단위) |
특정날짜로 부터 증감숫자 만큼 양수면 더하고, 음수면 뺍니다. |
42 | DATE_ADD(날짜 유형의 데이터, INTERVAL 증감숫자 단위) |
ADDDATE()와 동일하나 INTERVAL을 이용해서 작성해줘야 합니다. |
43 | SUBDATE(날짜 유형의 데이터, 증감숫자 \ INTERVAL 증감숫자 단위) |
특정날짜로 부터 증감숫자 만큼 양수면 빼고, 음수면 더합니다. |
44 | DATE_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초 단위를 증감
단위 설명 YEAR
연도를 증감 QUATRER
<분기 단위를 증감 (3개월 단위) MONTH
월을 증감 WEEK
주 단위를 증감 DAY
날 수를 증감 HOUR
시 단위를 증감 MINUTE
분 단위를 증감 SECOND
초 단위를 증감
현재 날짜/시간 구하기
NO | 함수명 | 설명 |
45 | NOW((생략가능)정확도) | - 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다. - 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다. - 표시형식 : YYYY-MM-DD HH:MM:SS |
46 | CURRENT_TIMESTAMP((생략가능)정확도) | - 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다. - 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다. - 표시형식 : YYYY-MM-DD HH:MM:SS |
47 | SYSDATE((생략가능)정확도) | -- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다. - 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다. - 표시형식 : YYYY-MM-DD HH:MM:SS |
48 | LOCALTIME((생략가능)정확도) | - 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다. - 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다. - 표시형식 : YYYY-MM-DD HH:MM:SS |
49 | LOCALTIMESTAMP((생략가능)정확도) | - 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다. - 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다. - 표시형식 : YYYY-MM-DD HH:MM:SS |
50 | CURDATE() | - 로컬 시간에 맞춰 현재 날짜를 출력합니다. - 표시형식 : YYYY-MM-DD |
51 | CURRENT_DATE() | - 로컬 시간에 맞춰 현재 날짜를 출력합니다. - 표시형식 : YYYY-MM-DD |
52 | CURTIME((생략가능)정확도) | - 로컬 시간에 맞춰 현재 시간을 출력합니다. - 정확도는 최대 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 | 함수명 | 설명 |
54 | YEAR(날짜형 데이터) |
- 날짜에서 연도 부분만 숫자형식으로 반환합니다. - 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다. |
55 | MONTH(날짜형 데이터) |
- 날짜에서 월 부분만 숫자형식으로 반환합니다. - 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다. |
56 | DAY(날짜형 데이터) |
- 날짜에서 일자 부분만 숫자형식으로 반환합니다. - 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다. |
57 | HOUR(날짜/시간형 데이터) |
- 날짜/시간 데이터에서 시간 부분만 숫자형식으로 반환합니다. - 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다. |
58 | MINUTE(날짜/시간형 데이터) |
- 날짜/시간 데이터에서 분 부분만 숫자형식으로 반환합니다. - 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다. |
59 | SECOND(날짜/시간형 데이터) |
- 날짜/시간 데이터에서 초 부분만 숫자형식으로 반환합니다. - 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다. |
60 | MICROSECOND(날짜/시간형 데이터) |
- 날짜/시간 데이터에서 밀리초 부분만 숫자형식으로 반환합니다. - 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다. |
61 | DATE(날짜/시간형 데이터) |
- 날짜/시간 데이터에서 날짜 부분만 문자열로 반환합니다. - 표시형식 : YYYY-MM-DD |
62 | TIME(날짜/시간형 데이터) |
- 날짜/시간 데이터에서 시간 부분만 문자열로 반환합니다. - 표시형식 : 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 | 함수명 | 설명 |
63 | DAYOFYEAR(날짜형 데이터) | - 기준일이 해당년도가 시작되고 며칠이 지났는지 보여주는 함수 |
64 | DAYOFMONTH(날짜형 데이터) | - 기준일이 해당월이 시작되고 며칠이 지났는지 보여주는 함수 |
65 | DAYOFWEEK(날짜형 데이터) | - 기준일이 해당주가 시작되고 며칠이 지났는지 보여주는 함수 - 주의 경우 일요일부터 시작(1) ~ 토요일 종료(7) |
66 | MONTHNAME(날짜형 데이터) | - 기준일의 월 풀네임을 표시해줍니다. |
67 | LAST_DAY(날짜형 데이터) | - 주어진 날짜 데이터에 해당하는 달의 마지막 일자를 문자열로 반환합니다. |
68 | QUARTER(날짜형 데이터) | - 입력한 날짜가 몇번째 분기에 있는가를 보여주는 함수 |
-- 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 | 함수명 | 설명 |
69 | DATEDIFF(날짜형 데이터1, 날짜형 데이터2) |
- 첫번째 인자에서 두번째 인자를 빼서 날짜 차이 계산해주는 함수 - 두 인자의 표현식이 같아야합니다. |
70 | TIMEDIFF(날짜시간 데이터1 \ 데이터1, 날짜시간 데이터2 \ 시간 데이터2) |
- 첫번째 인자에서 두번째 인자를 빼서 시간 차이 계산해주는 함수 - 두 인자의 표현식이 같아야하고, 두 인자 모두 시간이거나 둘다 날짜시간이어야합니다. |
-- 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 | 함수명 | 설명 |
71 | MAKEDATE(년도 \ 날짜형 데이터, 일자) |
- 입력한 년도 또는 입력한 날짜의 년도가 시작하고 입력한 일자가 지난 시점을 계산해서 날짜를 반환해줍니다. - 날짜형 데이터를 넣을경우 해당 날짜로부터가 아니라 해당 날짜의 연도가 시작한 뒤로 부터로 계산된다는 점을 주의해야합니다. |
72 | MAKETIME(시, 분, 초) |
- 입력한 시간, 분, 초로 시간을 만들어줍니다. |
-- 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 | 함수명 | 설명 |
73 | DATE_FORMAT(날짜형 데이터, 형식문자, (생략가능) 로케일) |
- 입력된 날짜의 포맷을 지정해서 출력해줍니다. - 3번째 인자로 로케일을 작성할 경우 해당 나라에 맞는 날짜 형식으로 변환해줍니다. |
74 | to_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 | 함수명 | 설명 |
75 | ABS(수치형 데이터) | - 입력한 수치 데이터의 절대값 반환 합니다. |
76 | SIGN(수치형 데이터) | - 주어진 수치형 데이터의 부호를 반환합니다. - 음수 : -1 / 0 : 0 / 양수 : 1 |
77 | CEILING(수치형 데이터) | - 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리) |
78 | CEIL(수치형 데이터) | - 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리) |
79 | FLOOR(수치형 데이터) | - 주어진 인자에서 주어진 실수보다 작은 수 중 가장 큰 정수를 반환합니다. (정수로 만들기 위해 소수점을 버림처리) |
80 | TRUNCATE(수치형 데이터, 기준 소수점 자리) | - 첫번쨰 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 까지만 남기고 전부 버림처리 합니다. |
81 | ROUND(수치형 데이터, 기준 소수점 자리) | - 첫번째 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 아래에서 반올림합니다. |
82 | MOD(수치형 데이터1, 수치형 데이터2) | - 첫번째 인자에서 두번째 인자를 나눈 후 나머지를 반환합니다. - 수치형 데이터1 MOD 수치형 데이터2 로도 사용할 수 있습니다. |
83 | POW(수치형 데이터1, 수치형 데이터2) | - 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다. |
84 | POWER(수치형 데이터1, 수치형 데이터2) | - 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다. |
85 | SQRT(수치형 데이터) | - 입력된 값의 루트값을 계산하여 반환해 줍니다. |
86 | PI() | - 원주율 |
87 | GREATEST(값1, 값2,,,) | - 인자 중 가장 큰 값을 구하는 함수 입니다. - 개별값을 콤마로 구분해서만 인자로 입력할 수 있습니다. |
88 | LEAST(값1, 값2,,,) | - 인자 중 가장 작은 값을 구하는 함수 - 개별값을 콤마로 구분해서만 인자로 입력할 수 있습니다. |
89 | DEGREES(수치형 데이터) | - 주어진 값을 라디안 값으로 간주하여 각도값으로 반환합니다. |
90 | RADIANS(수치형 데이터) | - 주어진 값을 각도로 간주하여 라디안값으로 반환합니다. |
91 | RAND((생략가능)숫자) | - 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프로그래밍 데이터베이스 기초에서 실무까지 - 나익수, 서연경 지음
위 책을 공부하며 작성하고 있습니다!
728x90
반응형
'Study > DB' 카테고리의 다른 글
[MariaDB] 연산자 (1) | 2024.09.29 |
---|---|
[MariaDB] 기본 조작 (DDL/DML) (0) | 2024.09.29 |
[MariaDB] 데이터 유형 (1) | 2024.09.23 |
[MariaDB] 데이터베이스 기초 (1) | 2024.09.23 |