1. 숫자 관련 함수들
- ROUND: 반올림
- CEIL: 올림
- FLOOR: 내림
SELECT
ROUND(0.5),
CEIL(0.4),
FLOOR(0.6);

SELECT
Price,
ROUND(price),
CEIL(price),
FLOOR(price)
FROM Products;

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

SELECT * FROM OrderDetails
WHERE ABS(Quantity - 10) < 5;

- GREATEST: (괄호 안에서) 가장 큰 값
- LEAST: (괄호 안에서) 가장 작은 값
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;

💡 그룹 함수 - 조건에 따라 집계된 값을 가져옵니다.
- MAX: 가장 큰 값
- MIN:가장 작은 값
- COUNT: 갯수 (NULL값 제외)
- SUM: 총합
- AVG: 평균 값
SELECT
MAX(Quantity),
MIN(Quantity),
COUNT(Quantity),
SUM(Quantity),
AVG(Quantity)
FROM OrderDetails
WHERE OrderDetailID BETWEEN 20 AND 30;

- POW(A, B), POWER(A, B): A를 B만큼 제곱
- SQRT: 제곱근
SELECT
POW(2, 3),
POWER(5, 2),
SQRT(16);

SELECT Price, POW(Price, 1/2)
FROM Products
WHERE SQRT(Price) < 4;

- TRUNCATE(N, n): N을 소숫점 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;

🐬 더 많은 숫자 함수 보러가기 ▶️
2. 문자열 관련 함수들
- UCASE, UPPER: 모두 대문자로
- LCASE, LOWER: 모두 소문자로
SELECT
UPPER('abcDEF'),
LOWER('abcDEF');

SELECT
UCASE(CustomerName),
LCASE(ContactName)
FROM Customers;

- CONCAT(...): 괄호 안의 내용 이어붙임
- CONCAT_WS(S, ...): 괄호 안의 내용 S로 이어붙임
SELECT CONCAT('HELLO', ' ', 'THIS IS ', 2021)

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

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

SELECT
CONCAT_WS(' ', FirstName, LastName) AS FullName
FROM Employees;

- SUBSTR, SUBSTRING: 주어진 값에 따라 문자열 자름
- LEFT: 왼쪽부터 N글자
- RIGHT: 오른쪽부터 N글자
SELECT
SUBSTR('ABCDEFG', 3),
SUBSTR('ABCDEFG', 3, 2),
SUBSTR('ABCDEFG', -4),
SUBSTR('ABCDEFG', -4, 2);

SELECT
LEFT('ABCDEFG', 3),
RIGHT('ABCDEFG', 3);

SELECT
OrderDate,
LEFT(OrderDate, 4) AS Year,
SUBSTR(OrderDate, 6, 2) AS Month,
RIGHT(OrderDate, 2) AS Day
FROM Orders;

- LENGTH: 문자열의 바이트 길이
- CHAR_LENGTH, CHARACTER_LEGNTH: 문자열의 문자 길이
SELECT
LENGTH('ABCDE'),
CHAR_LENGTH('ABCDE'),
CHARACTER_LENGTH('ABCDE');

-- w3wchool 사이트에서는 한글이 제대로 동작하지 않습니다.
SELECT
LENGTH('안녕하세요'), -- 15
CHAR_LENGTH('안녕하세요'), -- 5
CHARACTER_LENGTH('안녕하세요'); -- 5

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

SELECT * FROM Categories
WHERE CategoryName = ' Beverages '

SELECT * FROM Categories
WHERE CategoryName = TRIM(' Beverages ')

- LPAD(S, N, P): S가 N글자가 될 때까지 P를 이어붙임
- RPAD(S, N, P): S가 N글자가 될 때까지 P를 이어붙임
SELECT
LPAD('ABC', 5, '-'),
RPAD('ABC', 5, '-');

SELECT
LPAD(SupplierID, 5, 0),
RPAD(Price, 6, 0)
FROM Products;

- REPLACE(S, A, B): S중 A를 B로 변경
SELECT
REPLACE('맥도날드에서 맥도날드 햄버거를 먹었다.', '맥도날드', '버거킹');

SELECT
REPLACE(Description, ', ', ' and ')
FROM Categories;

- INSTR(S, s): S중 s의 첫 위치 반환, 없을 시 0
SELECT
INSTR('ABCDE', 'ABC'),
INSTR('ABCDE', 'BCDE'),
INSTR('ABCDE', 'C'),
INSTR('ABCDE', 'DE'),
INSTR('ABCDE', 'F');

SELECT * FROM Customers
WHERE INSTR(CustomerName, ' ') BETWEEN 1 AND 6;
-- < 6으로 하면?

- CAST(A AS T): A를 T 자료형으로 변환
- CONVERT(A, T): A를 T 자료형으로 변환
SELECT
'01' = '1',
CAST('01' AS DECIMAL) = CAST('1' AS DECIMAL);

SELECT
'01' = '1',
CONVERT('01', DECIMAL) = CONVERT('1', DECIMAL);

🐬 더 많은 문자열 함수 보러가기 ▶️