[MySQL] 1-3. 숫자와 문자열을 다루는 함수들

chxxrin·2024년 3월 27일
0

MySQL

목록 보기
4/4

더 많은 문자열 함수 보기

https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

1. 숫자 관련 함수들

함수설명
ROUND반올림
CEIL올림
FLOOR내림
SELECT 
  ROUND(0.5),
  CEIL(0.4),
  FLOOR(0.6);
SELECT 
  Price,
  ROUND(price),
  CEIL(price),
  FLOOR(price)
FROM Products;
함수설명
ABS절대값
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;

→ 12.XXXX인 Price를 가져와라

숫자함수 더 보기

https://dev.mysql.com/doc/refman/8.0/en/numeric-functions.html

2. 문자열 관련 함수들

함수설명
UCASE, UPPER모두 대문자로
LCASE, LOWER모두 소문자로
SELECT
  UPPER('abcDEF'),
  LOWER('abcDEF');
SELECT
  UCASE(CustomerName),
  LCASE(ContactName)
FROM Customers;

문자열 더하기 : CONCAT()

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

→ HELLO THIS IS 2021

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

→ 2021-8-15-AM

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

→ O-ID: 10248 …

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

→ Nancy Davolio

문자열 자르기

함수설명
SUBSTR, SUBSTRING주어진 값에 따라 문자열 자름
LEFT왼쪽부터 N글자
RIGHT오른쪽부터 N글자
SELECT
  SUBSTR('ABCDEFG', 3),
  SUBSTR('ABCDEFG', 3, 2),
  SUBSTR('ABCDEFG', -4),
  SUBSTR('ABCDEFG', -4, 2);
CDEFGCDDEFGDE
SELECT
  LEFT('ABCDEFG', 3),
  RIGHT('ABCDEFG', 3);
ABCEFG
SELECT
  OrderDate,
  LEFT(OrderDate, 4) AS Year,
  SUBSTR(OrderDate, 6, 2) AS Month,
  RIGHT(OrderDate, 2) AS Day
FROM Orders;
1996-07-0419960704

문자열 길이

→ 영어는 똑같이 나오지만, 한국어는 CHAR_LENGTH 사용해야함!

함수설명
LENGTH문자열의 바이트 길이
CHAR_LENGTH, CHARACTER_LEGNTH문자열의 문자 길이
SELECT
  LENGTH('ABCDE'),
  CHAR_LENGTH('ABCDE'),
  CHARACTER_LENGTH('ABCDE');
555
SELECT
  LENGTH('안녕하세요'), -- 15
  CHAR_LENGTH('안녕하세요'), -- 5
  CHARACTER_LENGTH('안녕하세요'); -- 5
함수설명
TRIM양쪽 공백 제거
LTRIM왼쪽 공백 제거
RTRIM오른쪽 공백 제거
SELECT
  CONCAT('|', ' HELLO ', '|'),
  CONCAT('|', LTRIM(' HELLO '), '|'),
  CONCAT('|', RTRIM(' HELLO '), '|'),
  CONCAT('|', TRIM(' HELLO '), '|');
HELLO
SELECT * FROM Categories
WHERE CategoryName = ' Beverages '
SELECT * FROM Categories
WHERE CategoryName = TRIM(' Beverages ')

→ 검색한 사람이 왼쪽이나 오른쪽에 스페이스를 붙였더라도 TRIM()을 쓰면 스페이스를 제거해서 글자만 제대로 검색함

함수설명
LPAD(S, N, P)S가 N글자가 될 때까지 P를 이어붙임
RPAD(S, N, P)S가 N글자가 될 때까지 P를 이어붙임
SELECT
  LPAD('ABC', 5, '-'),
  RPAD('ABC', 5, '-');
--ABCABC--
SELECT
  LPAD(SupplierID, 5, 0),
  RPAD(Price, 6, 0)
FROM Products;
0000118.000

문자열 변경 : REPLACE()

함수설명
REPLACE(S, A, B)S중 A를 B로 변경
SELECT
  REPLACE('맥도날드에서 맥도날드 햄버거를 먹었다.', '맥도날드', '버거킹');
SELECT
  REPLACE(REPLACE(Description, ' and ', ','), ',', ' 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');
12340
SELECT * FROM Customers
WHERE INSTR(CustomerName, ' ') BETWEEN 1 AND 6;
-- < 6으로 하면?

→ First Name의 길이가 6 이하인 사람

원하는 자료형으로 변환

함수설명
CAST(A AS T)A를 T 자료형으로 변환
CONVERT(A, T)A를 T 자료형으로 변환
SELECT
  '01' = '1',
  CAST('01' AS DECIMAL) = CAST('1' AS DECIMAL);
01
SELECT
  '01' = '1',
  CONVERT('01', DECIMAL) = CONVERT('1', DECIMAL);
01

0개의 댓글