[2023.12.04] SQL_Scalar Functions

하은·2023년 12월 4일
0

- Scalar Functions

- 입력값을 기준으로 단일 값을 반환하는 함수

  • Function | Description
    : UCASE = 영문을 대문자로 변환하는 함수
    : LCASE = 영문을 소문자로 변환하는 함수
    : MID = 문자열 부분을 반환하는 함수
    : LENGTH = 문자열의 길이를 반환하는 함수
    : ROUND = 지정한 자리에서 숫자를 반올림하는 함수
    : NOW = 현재 날짜 및 시간을 반환하는 함수
    : FORMAT = 숫자를 천단위 콤마가 있는 형식으로 반환하는 함수

- UCASE

- 영문을 대문자로 변환하는 함수

SELECT UCASE(string);

  • 예) 다음 문장을 모두 대문자로 조회
    SELECT UCASE ('This is ucase test')
  • 예) $15가 넘는 메뉴를 대문자로 조회
    SELECT UCASE(menu) FROM sandwith WHERE price > 15 ;

- LCASE

- 영문을 소문자로 변환하는 함수

SELECT LCASE(string);

  • 예)
    SELECT LCASE('This is lcase test')
  • 예) $5가 안 되는 메뉴를 소문자로 조회
    SELECT LCASE(menu) FROM sandwich WHERE price < 5;

- MID

-문자열 부분을 반환하는 함수

SELECT MID(string, start_position, length);
strint = 원본문자열
start = 문자열 반환 시작 위치(첫 글자는 1, 마지막 글자는 -1)
length = 반환할 문자열 길이

  • 예) 1번 위치에서 4글자를 조회
    SELECT MID('This is mid test', 1, 4);
    = This
  • 예) 6번 위치에서 5글자를 조회
    SELECT MID('This is mid test', 6, 5);
    = is mi
  • 예) -4번 위치에서 4글자를 조회
    SELECT MID('This is mid test', -4, 4);
    = test
  • 예) -8번 위치에서 3글자를 조회
    SELECT MID('This is mid test', -8, 3);
    = mid
  • 예) 11위 카페이름 중 두번째 단어만 조회, -6번 위치에서 4글자를 조회
    SELECT MID(cafe, -6, 4) FROM sandwich WHERE ranking = 11;
    = cafe

- LENGTH

- 문자열의 길이를 반환하는 함수

SELECT LENGTH(string)

  • 예)
    SELECT LENGTH ('This is len test')
    = 16
  • 예) 문자 없는 경우, 길이도 0
    SELECT LENGTH ('');
    = 0
  • 예) 공백의 경우도 문자이므로 길이 1
    SELECT LENGTH (' ');
    = 1
  • 예) NULL의 경우는 길이가 없으므로 NULL
    SELECT LENGTH (NULL);
    = NULL
  • 예) sandwich 테이블에서 top 3의 주소 길이 검색
    SELECT LENGTH (address), address FROM sandwich WHERE ranking <= 3;

- ROUND

- 지정한 자리에서 숫자를 반올림하는 함수

SELECT ROUND(number, decimals_place);

  • number: 반올림할 대상
  • decimals: 반올림할 소수점 위치(option)
  • 예) 반올림할 위치를 지정하지 않을 경우, 소수점 자리(0)에서 반올림
    SELECT ROUND(315.625);
    = 316
  • 예) 소수점 첫번째 위치는 0
    SELECT ROUND(315.625, 0);
    = 316
  • 예) 소수점 두번째 위치는 1
    SELECT ROUND(315.625, 1);
    = 315.6
  • 예) 소수점 세번째 위치는 2
    SELECT ROUND(315.625, 2);
    = 315.63
  • 예) 일단위 위치는 -1(정수에서 반올림)
    SELECT ROUND(315.625, -1);
    = 320
  • 예) 십단위 위치는 -2(정수에서 반올림)
    SELECT ROUND(315.625, -2);
    = 300
  • 예) sandwich 테이블에서 소수점 자리는 반올림해서 1달러 단위만 표시(최하위 3개만 표시)
    SELECT ranking, price, ROUND(price) FROM sandwich ORDER BY ranking DESC LIMIT 3

- NOW

- 현재 날짜 및 시간을 반환하는 함수

SELECT NOW();

- FORMAT

- 숫자를 천단위 콤마가 있는 형식으로 반환하는 함수(=STRING 형식)

SELECT FORMAT(number, decimal_place);

  • number: 포맷을 적용할 문자 혹은 숫자
  • decimals: 표시할 소수점 위치
  • 예) 소수점을 표시하지 않을 경우 0
    SELECT FORMAT(12345.6789, 0);
    = 12,346 = 소수점 다 지움.
  • 예) 소수점 두자리까지 표시할 경우 2
    SELECT FORMAT(12345.6789, 2);
    = 12,345.68
  • 예) 소수점 열자리까지 표시할 경우 10
    SELECT FORMAT(12345.6789, 10);
    = 12,345.6789000000
  • 예) oil_price 테이블에서 가격이 백원단위에서 반올림 했을 때 2000원 이상인 경우 천원단위에 콤마를 넣어서 조회
    SELECT FORMAT(가격, 0) FROM oil_price WHERE ROUND(가격, -3) >= 2000;

- 문제

  1. sandwich 테이블에서 가게이름은 대문자, 메뉴이름은 소문자로 조회
    = select ucase(cafe), lcase(menu) from sandwich;

  2. sandwich 테이블에서 10위 메뉴의 마지막 단어 조회
    = select ranking, cafe, mid(menu, -3, 3) from sandwich where ranking = 10;

  3. sandwich 테이블에서 메뉴이름의 평균길이를 조회
    = select avg(length(menu)) from sandwich limit 3;
    = select sum(length(menu)) from sandwich limit 3;

  4. oil_price 테이블에서 가격을 십원단위에서 반올림해서 조회
    = select 가격, round(가격, -2) from oil_price;

  5. oil_price 테이블에서 가격을 십원단위에서 반올림했을 때 2000원 이상인 경우는 천원 단위에서 반올림해서 조회
    = select format(가격, 0), 가격
    from oil_price
    where round(가격, -2) >= 2000;

0개의 댓글