DB. MySQL 3 숫자, 문자 관련 함수

JINSOO PARK·2021년 11월 10일
0

DB 강의

목록 보기
4/7

숫자 관련 함수들

링크텍스트


1. ROUND, CEIL, FLOOR


함수설명
ROUND반올림
CEIL올림
FLOOR내림

ex1)

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


ex2) 테이블 적용

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


2. ABS


함수설명
ABS절대값

ex1)

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


ex2) 테이블 적용

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

Quantity의 값에서 -10을 한 수가 절대값으로 나오기 때문에 Quantity가 1이라고 했을때 -10을 하면 -9가 아닌 9가 되기 때문에 5보다 작다라는 조건에 맞지 않는다.


3. GREATEST, LEAST


함수설명
GREATEST(괄호 안에서) 가장 큰 값
LEAST(괄호 안에서) 가장 작은 값

ex1)

SELECT GREATEST(1,2,3), LEAST(1,2,3,4,5);

괄호안의 최대값과, 최소값이 나옴


ex2) 테이블 적용

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

OrderDetailID, ProductID, Quantity 중 최대값과 최소값을 보여줌


4. MAX, MIN, COUNT, SUM, AVG


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

ex1) 테이블 적용

SELECT
    MAX(Quantity),
    MIN(Quantity),
    COUNT(Quantity),
    SUM(Quantity),
    AVG(Quantity)
FROM OrderDetails
WHERE OrderDetailID;

Quauntity 컬럼에서 최대값과 최소값, 데이터 갯수, 데이터들의 총 합, 평균을 보여줌


5. POW, POWER, SQRT


함수설명
POW(A,B), POWER(A,B)A를 B만큼 제곱
SQRT제곱근(square root)

ex1)

SELECT
    POW(2, 3),
    POWER(5, 2),
    SQRT(16);

각 각 2의 3승, 5의 2승, 16의 제곱근을 보여준다.


ex1-1)

SELECT
    SQRT(16),
    POWER(16, 1/2);

16의 제곱근은, 16의 1/2 승과 같다.


ex2) 테이블 적용

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

Price값에서 제곱근을 구한 값과, 2/1승을 한 값 중 4보다 작은 값에 해당하는 데이터를 보여줌


6. TRUNCATE


함수설명
TRUNCATE(N,n)N을 소수점 n자리까지 선택

ex1)

SELECT 
    TRUNCATE(1234.5678, 1),
    TRUNCATE(1234.5678, 2),
    TRUNCATE(1234.5678, 3);

소수점의 자릿수를 표시한다.


ex1-1) '-' 일때

SELECT 
    TRUNCATE(1234.5678, -1),
    TRUNCATE(1234.5678, -2),
    TRUNCATE(1234.5678, -3);

소수점 위로 자릿수 만큼 0으로 바뀐다.


ex2) 테이블 적용

SELECT Price FROM Products
WHERE Price = 12;

Price = 12 를 했을때 12에 해당하는 데이터만 나오는걸 알 수 있다. 여기서 TRUNCATE를 적용하면,


ex2-1) TRUNCATE 적용

SELECT Price FROM Products
WHERE TRUNCATE(Price,0) = 12;

Price의 소수점 0번째 까지 즉 소수점 앞의 숫자가 12와 같은지를 비교해서 조건에 맞는 데이터를 보여준다.



문자열 관련 함수들


1. UPPER, LOWER


함수설명
UCASE, UPPER모두 대문자로
LCASE, LOWER모두 소문자로

ex1)

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


ex2) 테이블 적용

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


2. CONCAT


함수설명
CONCAT(...)괄호 안의 내용 이어붙임
CONCAT_WS(S, ...)괄호 안의 내용 S로 이어붙임

ex1) CONCAT

SELECT CONCAT('HELLO', ' ', 'THIS IS', 2021)

HELLO 뒤에 빈 문자열을 넣고 THIS IS뒤에 는 공백이 없어서 2021과 붙어서 나왔다.


ex1-1) CONCAT_WS

SELECT CONCAT_WS('-', 2021, 11, 10, 'PM')

각 문자들 사이에 제일 앞에 '-'를 집어넣어서 붙여준다.


ex1) CONCAT 테이블 적용

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

'O-ID: ' 라는 문자열 뒤에 OrderID를 붙여서 보여줌


ex2) CONCAT_WS 테이블 적용

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

Employees 테이블의 FistName과 LastName을 중간에 공백을 넣고 합쳐서 칼럼명을 FullName으로 보여준다.


3. SUBSTR, LEFT, RIGHT


함수설명
SUBSTR, SUBSTRING주어진 값에 따라 문자열을 자름
LEFT왼쪽부터 N글자
RIGHT오른쪽부터 N글자

ex1) SUBSTR

SELECT
 SUBSTR('ABCDEFG', 3),
 SUBSTR('ABCDEFG', 3, 2),
 SUBSTR('ABCDEFG', -3),
 SUBSTR('ABCDEFG', -3, 2);

각 각

  • 처음(왼쪽)부터 3번째에 있는 글자를 시작으로 마지막(오른쪽) 까지 읽어옴

  • 3번째 글자부터 2글자만 읽어옴

  • 마지막에서 부터 3번째에 있는 글자를 시작으로 마지막까지 읽어옴

  • 마지막부터 3번째의 있는 글자를 시작으로 2글자만 읽어옴


ex2) LEFT, RIGHT

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

  • 왼쪽에서 부터 3글자를 읽어옴

  • 오른쪽에서 부터 3글자를 읽어옴


ex3) 테이블 적용

SELECT OrderDate
FROM Orders;

위의 데이터에서 년, 월, 일을 빼와서 나누어 본다.


ex3-1) 테이블 적용

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

  • OrderDate의 왼쪽에서 부터 4글자를 읽어와서 Year로 보여줌

  • OrderDate의 6번째 글자에서 부터 2글자를 읽어서 Month를 보여줌

  • OrderDate의 오른쪽에서 부터 2글자를 읽어서 Day를 보여줌


4. LENGTH


함수설명
LENGTH문자열의 크기(바이트 길이)
CHAT_LENGTH, CHARACTER_LENGTH문자열의 문자 길이

ex1) 영어

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

LENGTH 영어는 한 문자당 1바이트이기 때문에 5가 나왔고 나머지는 문자열의 길이를 나타낸다.


ex1-1) 한글

SELECT
 LENGTH('안녕하세요'),
 CHAR_LENGTH('안녕하세요'),
 CHARACTER_LENGTH('안녕하세요');

한글은 한 문자당 3바이트이기 때문에 LENGTH는 15가 나오고 문자열의 길이는 5가 나왔다.


5. TRIM


함수설명
TRIM양쪽 공백 제거
LTRIM왼쪽 공백 제거
RTRIM오른쪽 공백 제거

ex1)

SELECT
 CONCAT('|', ' HELLO ', '|'),
 CONCAT('|', LTRIM(' HELLO '), '|'),
 CONCAT('|', RTRIM(' HELLO '), '|'),
 CONCAT('|', TRIM(' HELLO '), '|');

  • LTRIM으로 왼쪽 공백만 지운 결과

  • RTRIM으로 오른쪽 공백만 지운 결과

  • TRIM으로 양쪽 공백을 지운 결과


ex2) 테이블 적용

SELECT * FROM Categories
WHERE CategoryName = ' Beverages '

공백이 들어가서 아무 데이터도 나오지 않음

ex2-1) TRIM 적용

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

양쪽 공백을 지우고 Berverages에 해당하는 데이터가 나옴


6. PAD


함수설명
LPAD(S, N, P)S가 N글자가 될 때까지 P를 왼쪽에 이어붙임
RPAC(S, N, P)S가 N글자가 될 때까지 P를 오른쪽에 이어붙임

ex1)

SELECT
 LPAD('ABC', 5, '-'),
 RPAD('ABC', 5, '-');

  • ABC가 5글자가 될때 까지 -를 왼쪽에 붙인 결과

  • ABC가 5글자가 될때 까지 -를 오른쪽에 붙인 결과


ex2) 테이블 적용

SELECT SupplierID, Price FROM Products;

SupplierID, Price에 PAD를 적용 시키면


ex2-1)

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

  • 왼쪽에 0을 넣어 5글자로 만든 결과

  • 오른쪽에 0을 넣어 6글자로 만든 결과


7. REPLACE


함수설명
REPLACE(S, A, B)S중 A를 B로 변경

ex1)

SELECT 
 REPLACE('맥도날드에서 맥도날드 햄버거를 먹었다.', '맥도날드', '버거킹');

맥도날드 -> 버거킹으로 교체


ex2) 테이블 적용

SELECT 
 Description
 FROM Categories;

Description에 REPLACE를 적용하면


ex2-1) REPLACE 적용

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

Description에 있는 ', '이 모두 ' and '로 교체 되었다.


ex2-2) REPLACE 적용2

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

기존에 있던 'and'와 겹치는 상황이 발생하므로 기존의 ', and'를 ','로 바꾼다음, ',' -> 'and'로 바꾸어 준 결과


8. INSTR


함수설명
INSTR(S, s)S중의 s의 첫 위치 반환, 없을 시 0

ex1)

SELECT
INSTR('ABCDE', 'ABC'),
INSTR('ABCDE', 'BCDE'),
INSTR('ABCDE', 'C'),
INSTR('ABCDE', 'DB'),
INSTR('ABCDE', 'F');

앞의 문자열에서 뒤에 해당하는 문자열의 위치를 반환한다.

  • 'ABC'에서 A가 해당하는 부분이 'ABCDE'의 첫번째 위치에 있으므로 1을 반환

  • 'BCDE'에서 B에 해당하는 부분이 'ABCDE'의 두번째 위치에 있으므로 2를 반환

  • 'C'는 'ABCDE'의 세번째 위치에 있으므로 3을 반환

  • 'DB'는 해당 문자열이 없으므로 0을 반환

  • 'F'는 해당 문자열이 없으므로 0을 반환


ex2) 테이블 적용

SELECT CustomerName FROM Customers;

CustomerName에 INSTR을 적용하면


ex2-1) INSTR 적용

SELECT CustomerName FROM Customers
WHERE INSTR(CustomerName, ' ') BETWEEN 1 AND 6;

CustomerName에서 공백의 위치와 BETWEEN 1 AND 6을 통해 1~6 까지와 비교하여 해당하는 값을 보여준다.
원하는 이름 글자수의 데이터를 불러 올 수 있다.

profile
개린이

0개의 댓글