SQL : 16. Scalar Functions

yeppi1802·2024년 6월 13일
0

❇️ 요약

  • Scalar Functions
  • UCASE / LCASE / MID / LENGTH
  • ROUND / NOW / FORMAT

📖 Scalar Functions

🔆 Scalar Functions

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

📖 UCASE

🔆 UCASE

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

☁️ 다음 문장을 모두 대문자로 조회

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

☁️ $ 15가 넘는 메뉴를 대문자로 조회

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

☁️ 다음 문장을 모두 소문자로 조회

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

☁️ $ 5가 안되는 메뉴를 소문자로 조회

SELECT LCASE(menu)
FROM sandwich
WHERE price < 5;
+--------------+
| LCASE(menu)  |
+--------------+
| meatball sub |
+--------------+
1 row in set (0.01 sec)

📖 MID

🔆 MID

  • 문자열 부분을 반환하는 함수
SELECT MID(string, start_position, lenth);

string : 원본 문자열

start : 문자열 반환 시작 위치 (첫글자는 1, 마지막 글자는 -1)

length : 반환할 문자열 길이


☁️ 1번 위치에서 4글자를 조회

mysql> SELECT MID('This is mid test', 1, 4);
+-------------------------------+
| MID('This is mid test', 1, 4) |
+-------------------------------+
| This                          |
+-------------------------------+
1 row in set (0.00 sec)

☁️ 11위 카페 이름 중 두번째 단어만 조회 - -4번 위치에서 4글자

mysql> SELECT MID(cafe, -4, 4)                
    -> FROM sandwich
    -> WHERE ranking = 11;
+------------------+
| MID(cafe, -4, 4) |
+------------------+
| Cafe             |
+------------------+
1 row in set (0.00 sec)

📖 LENGTH

이론

🔆 LENGTH

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

실습

☁️ 다음 문장의 길이를 조회

mysql> SELECT LENGTH('This is len test');
+----------------------------+
| LENGTH('This is len test') |
+----------------------------+
|                         16 |
+----------------------------+
1 row in set (0.00 sec)
  • 문자가 없는 경우 길이는 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)

☁️ sandwich 테이블에서 Top 3의 주소 길이를 검색

mysql> SELECT ranking, LENGTH(address), address
    -> FROM sandwich
    -> WHERE ranking <= 3;
+---------+-----------------+---------------------+
| ranking | LENGTH(address) | address             |
+---------+-----------------+---------------------+
|       1 |              19 | 2109 W. Chicago Ave |
|       2 |              18 | 800 W. Randolph St  |
|       3 |              16 |  445 N. Clark St    |
+---------+-----------------+---------------------+
3 rows in set (0.00 sec)

📖 ROUND

🔆 ROUND

  • 지정한 자리에서 숫자를 반올림하는 함수
  • DEFAULT 값 : 0, 소수점 자리 (0)에서 반올림
SELECT ROUND(number, decimals_place);

number : 반올림할 대상
decimals : 반올림할 소수점 위치 (Option)


☁️ ROUND 예제 1

  • 반올림할 위치를 지정하지 않는 경우(DEFAULT) : 소수점 자리 (0)에서 반올림
SELECT ROUND(315.625);
+----------------+
| ROUND(315.625) |
+----------------+
|            316 |
+----------------+
1 row in set (0.00 sec)
  • 소수점 두번째 위치 : 1
SELECT ROUND(315.625, 1);
+-------------------+
| ROUND(315.625, 1) |
+-------------------+
|             315.6 |
+-------------------+
1 row in set (0.00 sec)
  • 소수점 두번째 위치 : 2
SELECT ROUND(315.625, 2);
+-------------------+
| ROUND(315.625, 2) |
+-------------------+
|            315.63 |
+-------------------+
1 row in set (0.00 sec)
  • 1 단위 위치는 -1
SELECT ROUND(315.625, -1);
+--------------------+
| ROUND(315.625, -1) |
+--------------------+
|                320 |
+--------------------+
1 row in set (0.01 sec)
  • 10 단위 위치는 -2
SELECT ROUND(315.625, -2);
+--------------------+
| ROUND(315.625, -2) |
+--------------------+
|                300 |
+--------------------+
1 row in set (0.00 sec)

☁️ sandwich 테이블에서 소수점 자리를 반올림해서 1달러 단위까지만 표시 (최하위 3개만 표시)

SELECT ranking, price, ROUND(price) 
FROM sandwich 
ORDER BY ranking DESC
LIMIT 3;
+---------+-------+--------------+
| ranking | price | ROUND(price) |
+---------+-------+--------------+
|      50 |  6.85 |            7 |
|      49 |  8.75 |            9 |
|      48 |   7.5 |            8 |
+---------+-------+--------------+
3 rows in set (0.00 sec)

📖 NOW

🔆 NOW

  • 현재 날짜 및 시간을 반환하는 함수
  • 조회 했을때의 날짜와 시간 반환
SELECT NOW();

📖 FORMAT

🔆 FORMAT

  • 숫자를 천단위 콤마가 있는 형식으로 반환하는 함수
SELECT FORMAT(number, decimal_place);

number : 포멧을 적용할 문자 혹은 숫자
decimals : 표시할 소수점 위치


☁️ FORMAT 예제 1

  • 소수점을 표시하지 않는 경우 : 0
  • FORMAT은 ROUND와 다르게 생략 X
SELECT FORMAT(12345.6789, 0);
+-----------------------+
| FORMAT(12345.6789, 0) |
+-----------------------+
| 12,346                |
+-----------------------+
1 row in set (0.00 sec)
  • 소수점 두자리까지 표시할 경우
SELECT FORMAT(12345.6789, 2);
+-----------------------+
| FORMAT(12345.6789, 2) |
+-----------------------+
| 12,345.68             |
+-----------------------+
1 row in set (0.00 sec)
  • 소수점 10자리 까지 표시
SELECT FORMAT(12345.6789, 10); 
+------------------------+
| FORMAT(12345.6789, 10) |
+------------------------+
| 12,345.6789000000      |
+------------------------+
1 row in set (0.00 sec)

☁️ oil_price 테이블에서 가격이 백원단위에서 반올림 했을 때 2000원 이상인 경우 천원 단위에 콤마를 넣어서 조회

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)
profile
제로베이스 DA7 김예빈입니다.

0개의 댓글