[SQL] 16. Scalar Functions

hhyun·2024년 6월 14일

[SQL]

목록 보기
17/20

📖 Scalar Functions

🌟 Scalar Functions

  • 입력 값을 기준으로 단일 값을 반환하는 함수
functionDescription
UCASE영문을 대문자로 변환하는 함수
LCASE영문을 소문자로 변환하는 함수
MID문자열 부분을 반환하는 함수
LENGTH문자열의 길이를 반환하는 함수
ROUND지정한 자리에서 숫자를 반올림하는 함수 ( 0이 소수점 첫째 자리 )
NOW현재 날짜 및 시간을 반환하는 함수
FORMAT숫자를 천단위 콤마가 있는 형식으로 반환하는 함수

📖 UCASE

🌟 UCASE 문법

  • 영문을 대문자로 변환하는 함수
SELECT UCASE(string);

💭 UCASE 예제1

  • 다음 문장을 모두 대문자로 조회
mysql> select ucase('This Is ucase Test.');

+------------------------------+
| UCASE('This Is ucase Test.') |
+------------------------------+
| THIS IS UCASE TEST.          |
+------------------------------+
1 row in set (0.00 sec)

💭 UCASE 예제2

  • $15가 넘는 메뉴를 대문자로 조회
mysql> select ucase(menu) from sandwich where price > 15;

+--------------------------------------------------+
| ucase(menu)                                      |
+--------------------------------------------------+
| LOBSTER ROLL                                     |
| GRILLED LAUGHING BIRD SHRIMP AND FRIED PO’ BOY   |
| SHAVED PRIME RIB                                 |
+--------------------------------------------------+
3 rows in set (0.00 sec)

📖 LCASE

🌟 LCASE 문법

  • 영문을 소문자로 변환하는 함수
SELECT LCASE(string);

💭 LCASE 예제1

  • 다음 문장을 모두 소문자로 조회
mysql> select lcase('This Is LCASE Test'); 

+-----------------------------+
| lcase('This Is LCASE Test') |
+-----------------------------+
| this is lcase test          |
+-----------------------------+
1 row in set (0.01 sec)

💭 LCASE 예제2

  • $5가 안되는 메뉴를 소문자로 조회
mysql> select lcase(menu) from sandwich where price < 5;         
+--------------+
| lcase(menu)  |
+--------------+
| meatball sub |
+--------------+
1 row in set (0.00 sec)

📖 MID

🌟 MID 문법

  • 문자열 부분을 반환하는 함수
  • string : 원본 문자열
  • start : 문자열 반환 시작 위치(첫글자는 1, 마지막 글자는 -1)
  • length : 반환할 문자열 길이
SELECT MID(string,start_position,length);

💭 MID 예제1

  • -4번 위치(뒤에서 4번째 위치)에서 4글자 조회
mysql> select mid('This is mid test',-4,4); 

+------------------------------+
| mid('This is mid test',-4,4) |
+------------------------------+
| test                         |
+------------------------------+
1 row in set (0.01 sec)

💭 MID 예제2

  • 11위 카페이름 중 두번째 단어만 조회
    - 6번 위치에서 4글자
mysql> select mid(cafe,6.4) from sandwich where ranking =11; 

+---------------+
| mid(cafe,6.4) |
+---------------+
| Cafe          |
+---------------+
1 row in set (0.00 sec)

📖 LENGTH

🌟 LENGTH 문법

  • 문자열의 길이를 반환하는 함수
SELECT LENGTH(string);

💭 LENGTH 예제1

  • 문자없는 경우 길이 0
mysql> select length('');

+------------+
| length('') |
+------------+
|          0 |
+------------+
1 row in set (0.00 sec)
  • 공백을 준 경우 문자이므로 길이 1
mysql> select length(' ');

+-------------+
| length(' ') |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)
  • NULL인 경우 길이가 없으므로 NULL
mysql> select length(null); 

+--------------+
| length(null) |
+--------------+
|         NULL |
+--------------+
1 row in set (0.00 sec)

💭 LENGTH 예제2

  • sanwich 테이블에서 top3의 주소 길이를 검색
mysql> select length(address) from sandwich where ranking <= 3; 

+-----------------+
| length(address) |
+-----------------+
|              19 |
|              18 |
|              16 |
+-----------------+
3 rows in set (0.00 sec)

📖 ROUND

🌟 ROUND 문법

  • 지정한 자리에서 숫자를 반올림하는 함수 ( 0이 소수점 첫째 자리 )
  • number : 반올림할 대상
  • decimals :반올림할 소수점 위치 (Option)
SELECT ROUND(number, decimals_place);

💭 ROUND 예제1

  • 반올림할 위치를 지정하지 않을 경우, 소수점 자리(0)에서 반올림
  • 첫번째 소수점 자리 : 0 (기본)
mysql> select round(315.625); 

+----------------+
| round(315.625) |
+----------------+
|            316 |
+----------------+
1 row in set (0.01 sec)
  • 두번째 소수점 자리 : 1
mysql>  select round(315.625,1); 

+------------------+
| round(315.625,1) |
+------------------+
|            315.6 |
+------------------+
1 row in set (0.00 sec)
  • 세번째 소수점 자리 : 2
mysql>  select round(315.625,2);

+------------------+
| round(315.625,2) |
+------------------+
|           315.63 |
+------------------+
1 row in set (0.00 sec)
  • 1단위의 위치 : -1
mysql>  select round(315.625,-1);  

+-------------------+
| round(315.625,-1) |
+-------------------+
|               320 |
+-------------------+
1 row in set (0.01 sec)
  • 10단위의 위치
mysql>  select round(315.625,-2);  

+-------------------+
| round(315.625,-2) |
+-------------------+
|               300 |
+-------------------+
1 row in set (0.00 sec)

💭 ROUND 예제2

  • sandwich 테이블에서 소수점 자리는 반올림해서 1달러 단위까지만 표시 ( 최하위 3개만 표시 )
mysql> select round(price) 
	-> from sandwich 
	-> order by ranking desc  
    -> limit 3;

+--------------+
| round(price) |
+--------------+
|            7 |
|            9 |
|            8 |
+--------------+
3 rows in set (0.00 sec)

📖 NOW

🌟 NOW 문법

  • 현재 날짜 및 시간을 반환하는 함수
SELECT NOW(); 

💭 NOW 예제

  • 현재 날짜와 시간은?
mysql> select now();

+---------------------+
| now()               |
+---------------------+
| 2024-06-14 16:02:45 |
+---------------------+
1 row in set (0.01 sec)

📖 FORMAT

🌟 FORMAT 문법

  • 숫자를 천단위 콤마가 있는 형식으로 반환하는 함수
  • number : 포맷을 적용할 문자 혹은 숫자
  • decimals : 표시할 소수점 위치
SELECT FORMAT(number,decimal_place);

💭 FORMAT 예제1

  • 소수점을 표시하지 않을 경우 : 0 /반올림해서 표시
mysql> select format(12345.6789, 0); 

+-----------------------+
| format(12345.6789, 0) |
+-----------------------+
| 12,346                |
+-----------------------+
1 row in set (0.00 sec)
  • 소수점 두자리까지 표시 : 2 / 반올림해서 표시
mysql> select format(12345.6789, 2); 

+-----------------------+
| format(12345.6789, 2) |
+-----------------------+
| 12,345.68             |
+-----------------------+
1 row in set (0.00 sec)
  • 소수점 열자리까지 표시
mysql> select format(12345.6789, 10); 

+------------------------+
| format(12345.6789, 10) |
+------------------------+
| 12,345.6789000000      |
+------------------------+
1 row in set (0.00 sec)

💭 FORMAT 예제2

  • oil_price 테이블에서 가격이 백원단위에서 반올림했을 때 2000원 이사인 경우 / 천원단위에 콤마를 넣어서 조회
mysql> select format(가격, 0)   
    -> from oil_price
    -> where round(가격,-3) >= 2000;
+-------------------+
| format(가격, 0)   |
+-------------------+
| 1,509             |
| 1,598             |
| 1,635             |
| 2,160             |
+-------------------+
4 rows in set (0.00 sec

0개의 댓글