이미지 출처 : https://076923.github.io/posts/mysql-1/
W3School : https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all
숫자와 문자열관련 함수들을 공부해보겠습니다.
소수점 뒤로 숫자가 있는 어떤 숫자가 주어졌을 때 그것들을 반올림 하거나 올림 또는 내림한다.
SELECT ROUND(0.5), CEIL(0.4), FLOOR(0.6);
부호의 양음에 상과없이 플러스로 바꿔준다.
SELECT ABS(1), ABS(-1), ABS(3 - 10);
OrderDetailID, ProductID, Quantity중에서 가장 큰것과 가장 작은것을 각각 선택해서 추출
SELECT OrderDetailID, ProductID, Quantity, GREATEST(OrderDetailID, ProductID, Quantity), LEAST(OrderDetailID, ProductID, Quantity) FROM OrderDetails;
그룹함수 - 조건에 따라 집계된 값을 가져온다.
MAX와 MIN은 괄호안에 값이 아닌 어떤 컬럼을 기준으로 여러 행들중에 최대값과 최소값을 가져온다.
OrderDetailID가 20에서 30사이인것들중에 집계함수로 값들을 가져온다.
SELECT MAX(Quantity), MIN(Quantity), COUNT(Quantity), SUM(Quantity), AVG(Quantity) FROM OrderDetails WHERE OrderDetailID BETWEEN 20 AND 30;
SELECT POW(2, 3), POWER(5, 2), SQRT(16);
TRUNCATE는 n이 양수가 주어지면 소수점 뒤로 이 주어진 숫자만큼 값을 잘라낸다.
음수가 주어지면 이 숫자만큼 소수점 앖으로 0을 붙이게 된다.
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 UPPER('abcDEF'), LOWER('abcDEF');
다른 프로그래밍 언어들에서는 그냥 더하기를 써서 문자들을 더할 수 있지만 MySql에서는 CONCAT을 사용한다.
CONCAT 함수에서는 숫자도 문자로 변환되어서 아래처럼 문자열에 들어가진다.
SELECT CONCAT('HELLO', ' ', 'THIS IS ', 2021)
SELECT CONCAT('O-ID: ', OrderID) FROM Orders;
SELECT CONCAT_WS('-', 2021, 8, 15, 'AM')
CONCAT_WS는 '-'로 문자열을 더애서 출력한다.
SELECT SUBSTR('ABCDEFG', 3), # 3번째부터 읽어온다. SUBSTR('ABCDEFG', 3, 2), # 3번째부터 2개를 읽어온다. SUBSTR('ABCDEFG', -4), # 끝에서부터 4개를 읽어온다. SUBSTR('ABCDEFG', -4, 2);
SELECT LEFT('ABCDEFG', 3), RIGHT('ABCDEFG', 3);
각 문자마다 차지하는 바이트가 다를 수 있다.
한글을 쓰기에 일반적으로 MySQL애서 글자 수를 쓸때는 CHARACTER_LENGTH를 쓴다.
SELECT LENGTH('ABCDE'), CHAR_LENGTH('ABCDE'), CHARACTER_LENGTH('ABCDE');
SELECT CONCAT('|', ' HELLO ', '|'), CONCAT('|', LTRIM(' HELLO '), '|'), CONCAT('|', RTRIM(' HELLO '), '|'), CONCAT('|', TRIM(' HELLO '), '|');
SELECT * FROM Categories WHERE CategoryName = ' Beverages '
스페이스가 붙은채로 검색하는 것을 방지하기 위해 TRIM을 사용해준다.
SELECT * FROM Categories WHERE CategoryName = TRIM(' Beverages ')
SELECT LPAD('ABC', 5, '-'), RPAD('ABC', 5, '-');
SELECT REPLACE('맥도날드에서 맥도날드 햄버거를 먹었다.', '맥도날드', '버거킹');
SELECT * FROM Categories;
Description의 쉼표들을 REPLACE를 이용해서 and로 바꿔 출력해보자.
SELECT REPLACE(Description, ', ', ' and ') FROM Categories;
하지만 이렇게 하면 AND가 두개가 연속되는게 발생하므로 Description에 있는 and를 쉼표로 먼자 바꿔준다음에 바뀐 쉼표를 AND로 다시 바꿔주자.
SELECT Description, REPLACE(Description, ' and', ','), REPLACE(REPLACE(Description, ', and', ','), ',', ' and') FROM Categories;
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;
스페이스가 1~6사이에 들어가는 것을 찾고싶다!
스페이스의 첫 위치를 사용해서 길이를 알아낼 수 있다.
SELECT '01' = '1', CAST('01' AS DECIMAL) = CAST('1' AS DECIMAL);