SELECT IF(100>200, '참이다.', '거짓이다.');
수식이 거짓이므로 거짓이다.
를 출력.
수식1이 NULL인 경우 수식2를 출력.
수식1이 NULL이 아닌 경우 수식1을 출력.
SELECT IFNULL(NULL, 200); -- 200
SELECT IFNULL(NULL, '널입니다.'); -- 널입니다.
SELECT IFNULL(100, 50); -- 100
수식1과 수식2가 같으면 NULL을 반환.
다르면 수식1을 반환.
SELECT NULLIF(2*5, 5*2); -- NULL
SELECT NULLIF(3*5, 5*2); -- 15
CASE는 내장함수는 아니며 연산자로 분류됨.
다중 분기에서 사용된다.
SELECT CASE 10
WHEN 1 THEN '일'
WHEN 5 THEN '오'
WHEN 10 THEN '십'
ELSE '모름'
END AS '케이스연습';
-- 십
SELECT ASCII('A'); -- 65
SELECT CHAR(65); -- A
UTF-8에서 영문은 한 글자 당 1Byte, 한글은 한 글자 당 3Byte
select char_length('abc'); -- 3
select length('abc'); -- 3
select bit_length('abc'); -- 24
select char_length('가나다'); -- 3
select length('가나다'); -- 9
select bit_length('가나다'); -- 72
문자열을 합치기 위해서 CONCAT()을 사용할 수 있다.
SELECT num,
CONCAT(CAST(price AS CHAR(10)), 'x', CAST(amount AS CHAR(4)), '=') AS '단가*수량',
price * amount AS '구매액'
FROM buyTBL;
INT형 자료를 먼저 문자열로 변환한 후, CONCAT
CONCAT_WS()는 첫번째 파라미터로 구분자를 입력받음. 이후 나머지 파라미터(문자열)를 이을 때 구분자를 삽입
SELECT CONCAT_WS('/', '2024', '07', '13'); -- 2024/07/13
,
로 구분되어 있어야 하며 공백이 없어야 한다.SELECT ELT(2, 'A', 'D', 'B', 'C'); -- D
SELECT FIELD('둘', '하나', '둘', '셋'); -- 2
SELECT FIND_IN_SET('하나', '셋,둘,하나'); -- 3
SELECT INSTR('감자감자', '감자'); -- 1
SELECT LOCATE('감자', '감자감자'); -- 1
SELECT POSITION('감자' IN '감자감자'); -- 1
기준 문자열에서 위치로부터 길이만큼 문자열 삽입
SELECT INSERT('ABCDEFGHI', 3, 4, 'cdef'); -- ABcdefGHI
SELECT INSERT('ABCDEFGHI', 3, 2, 'cde'); -- ABcdeEFGHI
SELECT INSERT('ABCDEFGHI', 3, 4, 'cde'); -- ABcdeGHI
길이와 삽입할 문자열의 길이는 꼭 같지 않아도 됨.
SELECT LEFT('ABCDEFG', 3); -- ABC
SELECT RIGHT('ABCDEFG', 3); -- EFG
SELECT UPPER('abcdefg'); -- ABCDEFG
SELECT LOWER('ABCDEFG'); -- abcdefg
SELECT LPAD('순', 6, '두부'); -- 로나로나로메
SELECT RPAD('순', 6, '두부'); -- 메로나로나로
SELECT LTRIM(' 순두부'); -- 순두부
SELECT RTRIM('순두부 '); -- 순두부
SELECT TRIM(' 올 때 메로나 '); -- 올 때 메로나
SELECT TRIM(LEADING '!' FROM '!!!올 때 메로나!!!'); -- 올 때 메로나!!!
SELECT TRIM(TRAILING '.' FROM '...올 때 메로나...'); -- ...올 때 메로나
SELECT TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ올 때 메로나ㅋㅋㅋ'); -- 올 때 메로나
문자열 순서를 반대로 반환
SELECT REVERSE('오랑우탄'); -- 탄우랑오
길이만큼의 공백을 반환
SELECT CONCAT('안', SPACE(5), '녕하세요'); -- 안 녕하세요
두가지 방식 가능
SUBSTRING(문자열, 시작위치, 길이)
SUBSTRING(문자열 FROM 시작위치 FOR 길이)
SELECT SUBSTRING('가나다라마바사', 3, 3); -- 다라마
SELECT SUBSTRING('가나다라마바사' FROM 3 FOR 3); -- 다라마
길이 파라미터가 문자열의 길이보다 긴 경우에는 문자열의 끝까지 반환
SELECT SUBSTRING_INDEX('www.naver.com', '.', 2); -- www.naver
SELECT SUBSTRING_INDEX('www.naver.com', '.', -2); -- naver.com
횟수만큼 구분자가 나오면, 그 이후의 문자열은 버림(이전까지의 문자열을 반환)
횟수가 양수이면 왼쪽부터 세고, 음수이면 오른쪽부터 셈
SELECT FORMAT(3.14159265, 3); -- 3.141
SELECT BIN(25), OCT(25), HEX(25); -- 11001 31 19
절댓값 반환
SELECT ABS(-25); -- 25
사인, 코사인 탄젠트
역사인, 역코사인, 역탄젠트
올림, 내림, 반올림
SELECT CEILING(2.5), FLOOR(2.5), ROUND(2.5); -- 3, 2, 3
숫자를 변환할 진수로 변환
SELECT CONV('AA', 16, 2); -- 10101010
SELECT CONV(100, 10, 8); -- 144
SELECT DEGREES(PI()); -- 180
SELECT RADIANS(180); -- 3.141592653589793
숫자가 양수, 0, 음수 중 어디에 속하는지 반환
숫자를 소수점 기준 정수 위치까지 구하고 나머지를 버림
SELECT TRUNCATE(12345.6789, 2); -- 12345.67
SELECT TRUNCATE(12345.6789, 0); -- 12345
SELECT TRUNCATE(12345.6789, -2); -- 12300
날짜는 ''
로 감싸져 있어야 함
차이는 정수로만 주는 경우에는 DAY 단위로 계산되며,
MONTH나 YEAR 단위로 주고 싶은 경우에는 INTERVAL 정수 단위
로 주면 됨.
SELECT ADDDATE('2024-07-14', 3); -- 2024-07-17
SELECT SUBDATE('2024-07-14', 3); -- 2024-07-11
SELECT ADDDATE('2024-07-14', INTERVAL 1 YEAR); -- 2025-07-14
SELECT SUBDATE('2024-07-14', INTERVAL 1 MONTH); -- 2024-06-14
yyyy-MM-dd HH:mm:ss
형식HH:mm:ss
형식역시 날짜, 시간은 ''
로 감싸져 있어야 함
SELECT ADDTIME('2024-07-14 22:35:07', '2:2:2'); -- 2024-07-15 00:37:09
SELECT SUBTIME('2024-07-14 22:35:07', '2:2:2'); -- 2024-07-14 20:33:05
yyyy-MM-dd
HH:mm:ss
yyyy-MM-dd HH:mm:ss
SELECT CURDATE(); -- 2024-07-14
SELECT CURTIME(); -- 22:41:34
SELECT NOW(); -- 2024-07-14 22:41:29
SELECT SYSDATE(); -- 2024-07-14 22:41:24
HH:mm:ss
형태해당 날짜의 달에서 마지막 날
윤달 계산을 할 때 편리하게 사용 가능
SELECT LAST_DAY('2021-11-1'); -- 2021-11-30
해당 연도에서 정수 일만큼 지난 날짜
SELECT MAKEDATE(2025, 1); -- 2025-01-01
SELECT MAKEDATE(2025, 365); -- 2025-12-31
시, 분, 초를 사용해 HH:mm:ss
포맷으로 변경
SELECT MAKETIME(15,2,3); -- 15:02:03
SELECT PERIOD_ADD(202503, 3); -- 202506
SELECT PERIOD_DIFF(202503, 202512); -- -9
해당 날짜가 4분기 중 몇 분기에 속하는 지 반환
SELECT QUARTER(CURDATE()); -- 3
시간을 초단위로 변환
SELECT TIME_TO_SEC('11:25:01'); -- 41101
현재 사용자, 데이터베이스
SELECT USER(), DATABASE(); -- root@localhost sqldb
바로 앞의 SELECT문에서 조회된 행의 갯수를 반환
SELECT * FROM buyTBL; -- 10개 행이 조회됨
SELECT FOUND_ROWS(); -- 10
바로 앞의 INSERT, UPDATE, DELETE문에서 입력, 수정, 삭제된 행의 갯수를 반환
CREATE, DROP문은 0을 반환
SELECT문은 -1을 반환
현재 MySQL 버전
쿼리의 실행을 주어진 초만큼 멈춤