🌈 SELECT ROUND(0.5), CEIL(0.2), FLOOR(0.5);
🌈 SELECT Price ROUND(Price), CEIL(Price), FLOOR(Price) FROM Products;
🌈 SELECT ABS(10), ABS(-10.5), ABS(10 - 110);
🌈 SELECT OrderDetails WHERE ABS(Quantity - 5) < 5;
Quantity 컬럼의 값이 4 ~ 9 사이의 값인 데이터만 출력됩니다.
4-5=1, 9-5=4이기 때문에 5보다 작은 수가 되어 TRUE가 되기 때문입니다.
🌈 SELECT GREATEST(1, 5, 10), LEAST(1, 5, 10);
🌈 SELECT OrderDetailID, Quantity, GREATEST(Quantity, OrderDetailID), LEAST(Quantity, OrderDetailID) FROM OrderDetails;
🌈 SELECT MAX(Quantity), MIN(Quantity) FROM OrderDetails WHERE OrderDetailID BETWEEN 1 AND 20;
🌈 SELECT COUNT(Quantity), SUM(Quantity), AVG(Quantity) FROM OrderDetails WHERE OrderDetailID BETWEEN 1 AND 20;
🌈 SELECT POW(2, 3), POWER(2, 3), SQRT(16);
🌈 SELECT TRUNCATE(123.12345, 1), TRUNCATE(123.12345, 2), TRUNCATE(123.12345, 3);
두 번째 매개변수 숫자만큼 소숫점 자리수를 가져옵니다.
반올림을 해주지는않습니다.
두 번째 매개변수에 음수가 들어가면 소숫점은 사라지고 그 숫자만큼 소숫점의 앞쪽 숫자들이 0이 됩니다.
🌈 SELECT Price FROM Products WHERE TRUNCATE(Price, 0) = 12;
🌈 SELECT UPPER('abcDEF'), LOWER('abcDEF');
UPPER(), UCASE() : 대문자로 바꿔줍니다.
LOWER(), LCASE() : 소문자로 바꿔줍니다.
🌈 SELECT UPPER(CustomerName), LOWER(CustomerName) FROM Customers;
🌈 SELECT CONCAT('반가웠어요!', ' ', '그럼', 20000);
CONCAT(..., ..., ...) : 괄호 안의 문자열들을 이어 붙여줍니다.
숫자가 끼어있어도 문자열로 변환되어 이어집니다.
🌈 SELECT CONCAT('주문번호: ', OrderID) FROM OrderDetails;
🌈 SELECT CONCAT_WS('~', '반가웠어요!', '그럼', 20000);
🌈 SELECT CONCAT_WS('-', FirstName, LastName) AS 'Full name' FROM Employees;
🌈 SELECT SUBSTR('123456', 3), SUBSTR('123456', 3, 2), SUBSTR('123456', -4), SUBSTR('123456', -4, 2);
SUBSTR()는 인수를 3개 받을 수 있습니다.
첫번째 인수를 대상으로 두번째 인수의 수 만큼 왼쪽에서 오른쪽으로 센 후 뒤의 문자를 가져옵니다.
두번째 인수가 음수인 경우 문자의 뒤(오른쪽) 끝에서부터 셈을 합니다.
세번째 인수는 가져올 글자 수를 지정합니다.
❗️MySQL은 숫자를 1부터 셉니다.
🌈 SELECT LEFT('123456', 3), RIGHT('123456', 3);
LEFT() : 왼쪽에서부터 두번째 인자에 적힌 수 만큼 글자를 가져옵니다.
RIGHT() : 오른쪽에서부터 글자를 가져옵니다.
🌈 SELECT OrderDate, LEFT(OrderDate, 4) AS 'Year', SUBSTR(OrderDate, 6, 2) AS 'Month', RIGHT(OrderDate, 2) AS 'Day' FROM Orders;
🌈 SELECT LENGTH('반가워요'), CHAR_LENGTH('반가워요');
LENGTH() : 문자열의 바이트 길이를 출력합니다.
CHAR_LENGTH() : 문자열의 문자 갯수를 출력합니다.
🌈 SELECT CONCAT('H', ' OLL ', 'A'), CONCAT('H', TRIM(' OLL '), 'A'), CONCAT('H', LTRIM(' OLL '), 'A'), CONCAT('H', RTRIM(' OLL '), 'A');
TRIM() : 문자 양쪽 끝의 공백을 모두 제거해줍니다.
LTRIM(), RTRIM() : 각각 문자의 왼쪽, 오른쪽 공백을 제거해줍니다.
🌈 SELECT * FROM Categories WHERE CategoryName = TRIM(' Condiments');
🌈 SELECT LPAD('ABC', 5, '^'), RPAD('ABC', 5, '^');
1번째 인자로 넣은 문자가 2번째 인자의 길이만큼 될 때 까지 3번째 인자에 넣은 문자를 이어붙여줍니다.
LPAD() : 1번 문자의 왼쪽에 붙여줍니다.
RPAD() : 1번 문자의 오른쪽에 붙여줍니다.
🌈 SELECT ProductID, LPAD(ProductID, 5, 0), Price, RPAD(Price, 6, 0) FROM Products;
🌈 SELECT REPLACE('동대문에서 동대문닭한마리를 먹었습니다.', '동대문', '인사동');
🌈 SELECT CustomerName, REPLACE(CustomerName, ' ', '⭐️') FROM Customers;
🌈 SELECT Description, REPLACE(Description, 'and', ','), REPLACE(Description, ',', 'and') FROM Categories;
함수를 여러번 사용하여 문제를 해결할 수도 있습니다.
Description 컬럼에서 콤마 대신 and를 사용하고 싶은데 기존에 입력된 값 중에 콤마 대신 and가 되어 있는 부분이 있는 경우
첫번째 REPLACE()로 and를 콤마로 바꾼 후 두번째 REPLACE()로 다시 콤마를 and로 바꿔서 문제를 해결할 수 있습니다.
🌈 SELECT INSTR('12345', '123'), INSTR('12345', '2345'), INSTR('12345', 3), INSTR('12345', '9');
첫번째 인자에 두번째 인자가 동일하게 존재하는 경우 첫번째 자릿수를 반환해줍니다.
존재하지 않는 경우 0을 반환합니다.
🌈 SELECT * FROM Customers WHERE INSTR(CustomerName, ' ') BETWEEN 1 AND 3;
🌈 SELECT '01' = '1', CONVERT('01', DECIMAL) = CONVERT('1', DECIMAL);
CONVERT(A, T) : A를 T의 자료형으로 변환해줍니다.
문자 '01'과 '1'은 다르기때문에 FALSE가 됩니다.
이 둘을 DECIMAL형으로 바꾸면 둘 다 숫자 1이 되므로 TRUE가 됩니다.
💕 참고: 얄코님 유튜브 강의, SQL 첫걸음