0_ch4n
기계쟁이\n개발자
0_ch4n
0chn.xxx@gmail.com @0ch._.n
전체 방문자
오늘
어제

공지사항

  • All (282)
    • 🖥 CS (21)
      • 네트워크 (12)
      • 운영체제 (3)
      • 자료구조 (2)
      • Web (4)
    • 🧠 Algorithm (185)
      • [C] BOJ (93)
      • [JAVA] Programmers (91)
    • 📚 Study (69)
      • HTML&CSS (19)
      • MySQL (11)
      • JAVA (22)
      • Servlet&JSP (8)
      • Thymeleaf (2)
      • Spring (5)
      • JPA (2)
    • 📖 Book (1)
    • 📃 Certification (6)
      • 정보처리기사 (6)

인기 글

최근 글

최근 댓글

태그

  • java
  • 카카오
  • til
  • 프로그래머스
  • 코테
  • Programmers
  • CSS
  • 자바
  • 코딩테스트
  • kakao

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
0_ch4n

기계쟁이\n개발자

[MySQL] 함수
📚 Study/MySQL

[MySQL] 함수

2022. 6. 16. 19:23
반응형

 

✔️ 함수

 

📌 그룹 집계 함수

SELECT
  MAX(Quantity),
  MIN(Quantity),
  COUNT(Quantity),
  SUM(Quantity),
  AVG(Quantity)
FROM OrderDetails
WHERE OrderDetailID BETWEEN 20 AND 30;
  • MAX : 가장 큰 값
  • MIN : 가장 작은 값
  • COUNT : 갯수 (null 제외)
  • SUM : 총합
  • AVG : 평균
  • SELECT를 이용해 컬럼으로 나타낼 수도 있고 HAVING에서 조건절의 재료로 사용할 수 있습니다.

 

📌 숫자 관련 함수

SELECT ROUND(0.5), CEIL(0.4), FLOOR(0.6);

SELECT Price, ROUND(price), CEIL(price), FLOOR(price) FROM Products;
  • ROUND : 반올림
  • CEIL : 올림
  • FLOOR : 내림

 

SELECT ABS(1), ABS(-1), ABS(3 - 10);

SELECT * FROM OrderDetails WHERE ABS(Quantity - 10) < 5;
  • ABS : 절대값

 

SELECT GREATEST(1, 2, 3), LEAST(1, 2, 3, 4, 5);

SELECT
  OrderDetailID, ProductID, Quantity,
  GREATEST(OrderDetailID, ProductID, Quantity),
  LEAST(OrderDetailID, ProductID, Quantity)
FROM OrderDetails;
  • GREATEST : () 중 가장 큰 값
  • LEAST : () 중 가장 작은 값

 

SELECT POW(2, 3), POWER(5, 2), SQRT(16);

SELECT Price, POW(Price, 1/2) FROM Products WHERE SQRT(Price) < 4;
  • POW(a, b), POWER(a, b) : a를 b만큼 제곱
  • SQRT : 제곱근
  • EXP(n) : e의 거듭제곱
  • LOG(n) : 자연로그

 

SELECT
  TRUNCATE(1234.5678, 1),
  TRUNCATE(1234.5678, 2),
  TRUNCATE(1234.5678, 3),
  TRUNCATE(1234.5678, -1),
  TRUNCATE(1234.5678, -2),
  TRUNCATE(1234.5678, -3);

SELECT Price FROM Products
WHERE TRUNCATE(Price, 0) = 12;
  • TRUNCATE(N, n) : N을 소숫점 n자리까지 선택
    • n자리에 양수값을 넣으면 소수점 아래로 주어진 값의 자리만큼 반환한다
    • n자리에 음수값을 넣으면 소수점 위로 주어진 값의 자리만큼 내림처리된 후 반환한다
    • n자리에 0을 넣으면 소수점을 떼고 반환한다

 

SELECT bin(31), hex(31), oct(31);
  • bin() : 2진수
  • hex() : 16진수
  • oct() : 8진수

 

SELECT ROUND(RAND()*100, 0)
  • ROUND(RAND() * max, min) : min~max 사이의 랜덤값

 

📌 문자열 관련 함수

SELECT UPPER('abcDEF'), LOWER('abcDEF');

SELECT UCASE(CustomerName), LCASE(ContactName) FROM Customers;
  • UCASE, UPPER : 대문자로
  • LCASE, LOWER : 소문자로

 

SELECT CONCAT('HELLO', ' ', 'THIS IS ', 2021) -- HELLO THIS IS 2021

SELECT CONCAT_WS('-', 2021, 8, 15, 'AM') -- 2021-8-15-AM

SELECT CONCAT('O-ID: ', OrderID) FROM Orders;

SELECT
  CONCAT_WS(' ', FirstName, LastName) AS FullName
FROM Employees;
  • CONCAT(…) : () 안의 내용을 이어붙임
  • CONCAT_WS(S, …) : () 안의 내용을 S로 이어붙임
    • NULL이 내용에 있으면 출력되지 않는다.

 

SELECT
  SUBSTR('ABCDEFG', 3), -- CDEFG
  SUBSTR('ABCDEFG', 3, 2), -- CD
  SUBSTR('ABCDEFG', -4), -- DEFG
  SUBSTR('ABCDEFG', -4, 2); -- DE

SELECT
  LEFT('ABCDEFG', 3), -- ABC
  RIGHT('ABCDEFG', 3); -- EFG
  • SUBSTR, SUBSTRING(’str’, start, n) : ‘str’에서 start위치부터 n만큼 자른다
    • start에 음수값이 들어가면 뒤에서부터 시작한다.
  • LEFT, RIGHT(’str’, n) : ‘str’의 왼쪽, 오른쪽부터 n만큼 자른다

 

SELECT
  LENGTH('ABCDE'), -- 5
  CHAR_LENGTH('ABCDE'), -- 5
  CHARACTER_LENGTH('ABCDE'); -- 5

SELECT
  LENGTH('안녕하세요'), -- 15
  CHAR_LENGTH('안녕하세요'), -- 5
  CHARACTER_LENGTH('안녕하세요'); -- 5
  • LENGTH : 문자열 바이트 크기
  • CHAR_LENGTH, CHARACTER_LENGTH : 문자의 개수
  • BIT_LENGTH : 문자열 비트 크기

 

SELECT
  CONCAT('|', ' HELLO ', '|'), -- | HELLO |
  CONCAT('|', LTRIM(' HELLO '), '|'), -- |HELLO |
  CONCAT('|', RTRIM(' HELLO '), '|'), -- | HELLO|
  CONCAT('|', TRIM(' HELLO '), '|'); -- |HELLO|
  • TRIM : 양쪽 공백 제거
  • LTRIM : 왼쪽 공백 제거
  • RTRIM : 오른쪽 공백 제거

 

SELECT
  LPAD('ABC', 5, '-'), -- --ABC
  RPAD('ABC', 5, '-'); -- ABC--
  • LPAD(s, n, p) : s가 n개가 될 때까지 왼쪽에 p를 붙인다
  • RPAD(s, n, p) : s가 n개가 될 때까지 오른쪽에 p를 붙인다

 

SELECT
  REPLACE('맥도날드에서 맥도날드 햄버거를 먹었다.', '맥도날드', '버거킹');
	-- 버거킹에서 버거킹 햄버거를 먹었다.
  • REPLACE(s, a, b) : s에서 a를 b로 치환

 

SELECT
  INSTR('ABCDE', 'ABC'), -- 1
  INSTR('ABCDE', 'BCDE'), -- 2
  INSTR('ABCDE', 'C'), -- 3
  INSTR('ABCDE', 'DE'), -- 4
  INSTR('ABCDE', 'F'); -- 5
  • INSTR(S, s) : S 중 s의 첫 위치 반환 (없으면 0)

 

SELECT
  '01' = '1', -- 0
  CONVERT('01', DECIMAL) = CONVERT('1', DECIMAL); -- 1
  • CONVERT(a, t) : a를 t 자료형으로 변환
  • CAST(a AS t)로도 사용 가능
  • t로 올 수 있는 타입
    • BINARY
    • DECIMAL, CHAR, NCHAR, SIGNED, UNSIGNED
    • DATE, DATETIME, TIME
    • JSON

 

SELECT
  REPEAT('A', 3);
  • REPEAT(s, n) : s를 n번 반복

 

SELECT
  REVERSE('abcdef');
  • REVERSE(s) : s를 뒤집어 반환

 

-- MySQL은 배열 인덱스 시작이 1이다.
LOCATE('abc', 'ababcDEFabc'); -- 3
LOCATE('abc', 'ababcDEFabc', 4); --9
  • LOCATE(s, t, i) : t에서 s의 위치를 i부터 찾아서 반환

 

📌 시간/날짜 관련 함수

SELECT CURDATE(), CURTIME(), NOW();
  • CURRENT_DATE() , CURDATE() : 현재 날짜 반환
  • CURRENT_TIEM() , CURTIME() : 현재 시간 반환
  • CURRENT_TIMESTAMP() , SYSDATE() , NOW() : 현재 시간과 날짜 반환

 

SELECT
  '2021-6-1' = '2021-06-01',
  DATE('2021-6-1') = DATE('2021-06-01'),
  '1:2:3' = '01:02:03',
  TIME('1:2:3') = TIME('01:02:03');
  • DATE(’yyyy-MM-dd’) : 문자열에 따라 날짜 생성
  • TIME(’hh:mm:ss’) : 문자열에 따라 시간 생성

 

SELECT
  OrderDate,
  YEAR(OrderDate) AS YEAR,
  MONTHNAME(OrderDate) AS MONTHNAME,
  MONTH(OrderDate) AS MONTH,
  WEEKDAY(OrderDate) AS WEEKDAY,
  DAYNAME(OrderDate) AS DAYNAME,
  DAY(OrderDate) AS DAY
FROM Orders;
  • YEAR : 주어진 DATETIME값의 년도 반환
  • MONTHNAME : 주어진 DATETIME값의 월(영문) 반환
  • MONTH : 주어진 DATETIME값의 월 반환
  • WEEKDAY : 주어진 DATETIME값의 요일값 반환 (월요일 : 0)
  • DAYNAME : 주어진 DATETIME값의 요일명 반환
  • DAYOFMONTH, DAY : 주어진 DATETIME값의 날짜(일) 반환

 

SELECT
  HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
  • HOUR : 주어진 DATETIME의 시 반환
  • MINUTE : 주어진 DATETIME의 분 반환
  • SECOND : 주어진 DATETIME의 초 반환

 

SELECT 
  ADDDATE('2021-06-20', INTERVAL 1 YEAR),
  ADDDATE('2021-06-20', INTERVAL -2 MONTH),
  ADDDATE('2021-06-20', INTERVAL 3 WEEK),
  ADDDATE('2021-06-20', INTERVAL -4 DAY),
  ADDDATE('2021-06-20', INTERVAL -5 MINUTE),
  ADDDATE('2021-06-20 13:01:12', INTERVAL 6 SECOND);
  • ADDDATE(’yyyy-MM-dd’, INTERVAL n YEAR) : 시간/날짜 더하기
  • SUBDATE(’yyyy-MM-dd’, INTERVAL n YEAR) : 시간/날짜 빼기

 

SELECT
  OrderDate,
  NOW(),
  DATEDIFF(OrderDate, NOW())
FROM Orders;
  • DATEDIFF(’yyyy-MM-dd’, ‘yyyy-MM-dd’) : 두 시간/날짜 간 일수차
  • TIMEDIFF(’hh:mm:ss’, ‘hh:mm:ss’) : 두 시간/날짜 간 시간차

 

SELECT
  OrderDate,
  LAST_DAY(OrderDate),
  DAY(LAST_DAY(OrderDate)),
  DATEDIFF(LAST_DAY(OrderDate), OrderDate)
FROM Orders;
  • LAST_DAY(’yyyy-MM-dd’) : 해당 달의 마지막 날짜

 

SELECT
  DATE_FORMAT(NOW(), '%M %D, %Y %T'),
  DATE_FORMAT(NOW(), '%y-%m-%d %h:%i:%s %p'),
  DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %p %h시 %i분 %s초');
  • %Y : 년도 4자리
  • %y : 년도 2자리
  • %M : 월 영문
  • %m : 월 숫자
  • %D : 일 영문(1st, 2nd, 3rd …)
  • %d, %e : 일 숫자(01~31)
  • %T : hh:mm:ss
  • %r : hh:mm:ss AM/PM
  • %H, %k : 시(~23)
  • %h, %l : 시(~12)
  • %i : 분
  • %S, %s : 초
  • %p : AM/PM

 

SELECT
  DATEDIFF(
    STR_TO_DATE('2021-06-04 07:48:52', '%Y-%m-%d %T'),
    STR_TO_DATE('2021-06-01 12:30:05', '%Y-%m-%d %T')
  ),
  TIMEDIFF(
    STR_TO_DATE('2021-06-04 07:48:52', '%Y-%m-%d %T'),
    STR_TO_DATE('2021-06-01 12:30:05', '%Y-%m-%d %T')
  );
  • STR_TO_DATE(S, F) : S를 F형식으로 해석하여 시간/날짜 생성

 

📌 기타 함수

SELECT IF (1 > 2, '1는 2보다 크다.', '1은 2보다 작다.');
  • IF(조건, T, F) : 조건이 참이라면 T, 거짓이면 F 반환

 

SELECT
  IFNULL('A', 'B'),
  IFNULL(NULL, 'B');
  • IFNULL(A, B) : A가 NULL이 아니면 A 반환, NULL일 시 B 반환

 

SELECT
	NULLIF('A', 'B');
  • NULLIF(A, B) : A와 B가 같으면 NULL 반환, 같지 않으면 A 반환

 

SELECT
CASE
  WHEN -1 > 0 THEN '-1은 양수다.'
  WHEN -1 = 0 THEN '-1은 0이다.'
  ELSE '-1은 음수다.'
END;
  • CASE
    • WHEN [조건] THEN [참일 때 결과]
    • ELSE [거짓일 때 결과]
  • END
반응형
저작자표시 (새창열림)

'📚 Study > MySQL' 카테고리의 다른 글

[MySQL] 서브쿼리  (0) 2022.07.02
[MySQL] 제약조건  (0) 2022.06.19
[MySQL] 문법  (0) 2022.06.19
[MySQL] 연산자  (0) 2022.06.15
[MySQL] 데이터 타입  (0) 2022.06.15
    0_ch4n
    0_ch4n
    while(true) { study(); }

    티스토리툴바