MySQL & SQL (숫자와 문자열 함수)

윤태영·2024년 6월 20일
0
post-thumbnail

이미지 출처 : https://076923.github.io/posts/mysql-1/
W3School : https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all

숫자와 문자열관련 함수들을 공부해보겠습니다.

숫자 관련 함수들 📕

  • ROUND - 반올림
  • CEIL - 올림
  • FLOOR - 내림

소수점 뒤로 숫자가 있는 어떤 숫자가 주어졌을 때 그것들을 반올림 하거나 올림 또는 내림한다.

SELECT 
  ROUND(0.5),
  CEIL(0.4),
  FLOOR(0.6);

  • ABS - 절대값

부호의 양음에 상과없이 플러스로 바꿔준다.

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

  • GREATEST - (괄호 안에서) 가장 큰 값
  • LEAST - (괄호 안에서) 가장 작은 값

OrderDetailID, ProductID, Quantity중에서 가장 큰것과 가장 작은것을 각각 선택해서 추출

SELECT
  OrderDetailID, ProductID, Quantity,
  GREATEST(OrderDetailID, ProductID, Quantity),
  LEAST(OrderDetailID, ProductID, Quantity)
FROM OrderDetails;

그룹함수 - 조건에 따라 집계된 값을 가져온다.

MAX와 MIN은 괄호안에 값이 아닌 어떤 컬럼을 기준으로 여러 행들중에 최대값과 최소값을 가져온다.

  • MAX - 가장 큰 값
  • MIN - 가장 작은 값
  • COUNT - 갯수 (NULL값 제외)
  • SUM - 총합
  • AVG - 평균 값

OrderDetailID가 20에서 30사이인것들중에 집계함수로 값들을 가져온다.

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);

  • TRUNCATE(N, n) - N을 소숫점 n자리까지 선택

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);

문자열 관련 함수들 📕

  • UCASE, UPPER - 모두 대문자로
  • LCASE, LOWER - 모두 소문자로

괄호안의 텍스트를 모두 대문자 혹은 소문자로 바꿔준다.

SELECT
  UPPER('abcDEF'),
  LOWER('abcDEF');  

  • CONCAT(...) - 괄호 안의 내용 이어붙임
  • CONCAT_WS(S, ...) - 괄호 안의 내용 S로 이어붙임

다른 프로그래밍 언어들에서는 그냥 더하기를 써서 문자들을 더할 수 있지만 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는 '-'로 문자열을 더애서 출력한다.

  • SUBSTR, SUBSTRING - 주어진 값에 따라 문자열 자름
  • LEFT - 왼쪽부터 N글자
  • RIGHT - 오른쪽부터 N글자
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);

  • LENGTH - 문자열의 바이트 길이
  • CHAR_LENGTH, CHARACTER_LEGNTH - 문자열의 문자 길이

각 문자마다 차지하는 바이트가 다를 수 있다.
한글을 쓰기에 일반적으로 MySQL애서 글자 수를 쓸때는 CHARACTER_LENGTH를 쓴다.

SELECT
  LENGTH('ABCDE'),
  CHAR_LENGTH('ABCDE'),
  CHARACTER_LENGTH('ABCDE');

  • TRIM - 양쪽 공백 제거
  • LTRIM - 왼쪽 공백 제거
  • RTRIM - 오른쪽 공백 제거
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 ')

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

  • REPLACE(S, A, B) - S중 A를 B로 변경
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;

  • 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;

스페이스가 1~6사이에 들어가는 것을 찾고싶다!
스페이스의 첫 위치를 사용해서 길이를 알아낼 수 있다.

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

profile
ice blue

0개의 댓글