함수 사용
MATH 함수
ROUND(반올림), CEIL(올림), FLOOR(내림);
SELECT;
ROUND(0.5), CEIL(0.4), FLOOR(0.6);
// 1, 1, 0
( ABS(절대값) )
SELECT
ABS(1),
ABS(0.4),
ABS(-1203),
ABS(10-14);
// 1, 0.4, 1203, 4
+- 값 찾기
ABS(Quantity - 10) < 5;
// Quantity값의 10 +-5 인 값
GREATEST(최대값), LEAST(최소값);
SELECT;
GREATEST(1, 243, 52), LEAST(93, 22, 3, 59);
// 243, 3
( 그룹 함수, 집계 MAX, MIN, COUNT, SUM, AVG )
SELECT
MAX(Quantity),
MIN(Quantity),
COUNT(Quantity),
SUM(Quantity),
AVG(Quantity)
FROM OrderDetails;
// OrderDetails라는 테이블에서 (Quantity)의 MAX, MIN,
// COUNT, SUM, AVG를 구한다.
// 위의 GREATEST, LEAST와는 다르다!
POW(A, B), POWER(A, B)(제곱), SQRT(제곱근);
SELECT;
POW(2, 3), POWER(2, 3), SQRT(4);
// 8, 8, 2
TRUNCATE;
SELECT;
TRUNCATE(1234.5678, 1); // 1234.5
TRUNCATE(1234.5678, 2); // 1234.56
TRUNCATE(1234.5678, 0); // 1234
TRUNCATE(1234.5678, -1); // 1230
TRUNCATE(1234.5678, -2); // 1200
STRING 함수
UCASE, UPPER, LCASE, LOWER;
SELECT;
UCASE("str"); // 'STR'
UPPER("str"); // 'STR'
LCASE("STR"); // 'str'
LOWER("STR"); // 'str'
( CONCAT(...), CONCAT_WS(S, ...) )
SELECT
CONCAT('Hello', ' ', 2021) // 'Hello 2021'
CONCAT_WS('-', 2021, 10, 10, 'SUN'); // '2021-10-10-SUN'
SUBSTR, SUBSTRING, LEFT, RIGHT;
SELECT;
SUBSTR("ABCDEFG", 3); // 'CDEFG'
SUBSTR("ABCDEFG", 3, 2); // 'CD'
SUBSTR("ABCDEFG", -4); // 'DEFG'
SUBSTR("ABCDEFG", -4, 2); // 'DE'
LEFT("ABCD", 3); // 'ABC'
RIGHT("ABCD", 3); // 'BCD'
LENGTH, CHAR_LENGTH, CHARACTER_LENGTH;
SELECT;
LENGTH("abc"); // 3
CHAR_LENGTH("abc"); // 3
LENGTH("안녕하세요"); // 15
CHAR_LENGTH("안녕하세요"); // 5
TRIM, LTRIM, RTRIM;
SELECT;
TRIM(" HELLO "); // 'HELLO'
CONCAT("|", LTRIM(" HELLO "), "|"); // '|HELLO |'
CONCAT("|", RTRIM(" HELLO "), "|"); // '| HELLO|'
LPAD, RPAD;
SELECT;
LPAD("HI", 5, "-"); // '---HI'
// 'HI'가 5글자가 될 때까지 '-'를 왼쪽에 붙인다.
RPAD("HI", 5, "-"); // 'HI---'
// 'HI'가 5글자가 될 때까지 '-'를 오른쪽에 붙인다.
// 언제 쓰냐?
// ID값이 9999까지 있을때,
SELECT;
LPAD(ID, 4, 0);
/*
ID
0001
0002
0003
0004
.
.
.
9997
9998
9999
*/
// 위와 같이 깔끔하게 정리 가능.
( REPLACE(S, A, B) -> S중의 A를 B로 변경 )
SELECT
REPLACE('현대자동차는 전세계적인 명차야. 현대자동차 만세', '현대자동차', 'BMW');
// 'BMW는 전세계적인 명차야. BMW 만세'
( INSTR(S, s) -> S중 s의 첫 위치(idx) 반환. 없을 시 0 반환 )
SELECT
INSTR('hello', 'e') // 2
INSTR('hello', 'w') // 0
// SQL에서는 idx를 0이 아닌 1부터 시작한다
시간/날짜 관련 함수
CURDATE(), CURTIME(), NOW();
SELECT;
CURDATE(), CURTIME(), NOW();
// 현재 날짜, 현재 시간, 현재 날짜와 시간을 표기한다
DATE(), TIME();
SELECT;
DATE("20211010"); // '2021-10-10'
DATE("2021.6.18"); // '2021-06-18'
TIME("1:2:3"); // '01:02:03'
( YEAR, MONTHNAME, MONTH, WEEKDAY, DAYNAME, DAY )
각각 행, 미국식 월, 숫자 월, 요일값(0부터), 요일, 날짜 반환
SELECT
YEAR(NOW()) // 2021
MONTH((NOW()) // 10
( HOUR, MINUTE, SECOND )
SELECT
HOUR(NOW())
MINUTE(NOW())
SECOND(NOW())
각각 현재 시간, 분, 초 반환
( ADDDATE )
SELECT
ADDDATE('2021-10-11', INTERVAL 1 YEAR) // '2022-10-11'
ADDDATE('2021-10-11', INTERVAL -2 MONTH) // '2021-08-11'
( DATE_DIFF(두 시간/날짜 간 일수차), TIME_DIFF(두 시간/날짜 간 시간차) )
SELECT
DATE_DIFF('1996-07-05', NOW()) // -9229
( DATE_FORMAT -> 시간/날짜를 지정한 형식으로 반환 )
/*
%Y : 년도 4자리
%y : 년도 2자리
%M : 월 영문
%m : 월 숫자
%D : 일 영문
%d, %e : 일 숫자
%T : hh:mm:ss
%r : hh:mm:ss AM/PM
%H, %K : 시 (~23)
%h, %l : 시 (~12)
%i : 분
%S, %s : 초
%p : AM/PM
*/
SELECT
DATE_FORMAT(NOW(), '%y년 %m월 %d일 %p %H시 %i분 %S초')
// '21년 10월 11일 AM 09시 58분 12초'
기타 함수
( IF(조건, T, F) -> 조건이 참이라면 T, 거짓이면 F 반환 )
SELECT
IF(1 < 2, '1은 2보다 작다', '1은 2보다 크다')
// '1은 2보다 작다'
( 좀 더 복잡한 조건문은 CASE문 사용 )
SELECT
CASE
WHEN -1 > 0 THEN '-1은 양수다.'
WHEN -1 = 0 THEN '-1은 0이다.'
ELSE '-1은 음수다.'
END;
// '-1은 음수다.'
( IFNULL(A, B) -> A가 NULL일 시 B 출력 )
SELECT
IFNULL('A', 'B') // 'A'
IFNULL(NULL, 'B') // 'B'
// 백업의 개념. A테이블의 값이 없으면 B테이블의 값을 출력해주게.