[MySQL] Scalar Functions

Bpius·2023년 11월 12일
0

MySQL

목록 보기
11/15
post-thumbnail

Scalar Functions

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

실습은 sandwich를 판매하는 카페 table로 진행해보자.

mysql> select * from sandwich;
+---------+---------------------------------+--------------------------------------------------+-------+-------------------------+
| ranking | cafe                            | menu                                             | price | address                 |
+---------+---------------------------------+--------------------------------------------------+-------+-------------------------+
|       1 | Old Oak Tap                     | BLT                                              |    10 | 2109 W. Chicago Ave     |
|       2 | Au Cheval                       | Fried Bologna                                    |     9 | 800 W. Randolph St      |
|       3 | Xoco                            | Woodland Mushroom                                |   9.5 |  445 N. Clark St        |
|       4 | Al’s Deli                       | Roast Beef                                       |   9.4 |  914 Noyes St           |
|       5 | Publican Quality Meats          | PB&L                                             |    10 | 825 W. Fulton Mkt       |
|       6 | Hendrickx Belgian Bread Crafter | Belgian Chicken Curry Salad                      |  7.25 |  100 E. Walton St       |
|       7 | Acadia                          | Lobster Roll                                     |    16 | 1639 S. Wabash Ave      |
|       8 | Birchwood Kitchen               | Smoked Salmon Salad                              |    10 | 2211 W. North Ave       |
|       9 | Cemitas Puebla                  | Atomica Cemitas                                  |     9 | 3619 W. North Ave       |
|      10 | Nana                            | Grilled Laughing Bird Shrimp and Fried Po’ Boy   |    17 | 3267 S. Halsted St      |
|      11 | Lula Cafe                       | Ham and Raclette Panino                          |    11 | 2537 N. Kedzie Blvd     |
|      12 | Ricobene’s                      | Breaded Steak                                    |  5.49 |  Multiple location      |
|      13 | Frog n Snail                    | The Hawkeye                                      |    14 | 3124 N. Broadwa         |
|      14 | Crosby’s Kitchen                | Chicken Dip                                      |    10 | 3455 N. Southport Ave   |
|      15 | Longman & Eagle                 | Wild Boar Sloppy Joe                             |    13 | 2657 N. Kedzie Ave      |
|      16 | Bari                            | Meatball Sub                                     |   4.5 |  1120 W. Grand Ave      |
|      17 | Manny’s                         | Corned Beef                                      | 11.95 |  1141 S. Jefferson St   |
50 rows in set (0.01 sec)

UCASE

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

mysql> select ucase('this is ucase test');
+-----------------------------+
| ucase('this is ucase test') |
+-----------------------------+
| THIS IS UCASE TEST          |
+-----------------------------+
1 row in set (0.00 sec)

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

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

mysql> select lcase('THIS IS LCASE TEST');
+-----------------------------+
| lcase('THIS IS LCASE TEST') |
+-----------------------------+
| this is lcase test          |
+-----------------------------+
1 row in set (0.00 sec)

ex) 5달러가 안 되는 메뉴를 소문자로 조회

mysql> select lcase(menu)
    -> from sandwich
    -> where price < 5;
+--------------+
| lcase(menu)  |
+--------------+
| meatball sub |
+--------------+
1 row in set (0.00 sec)

MID

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

  • 문법

    select mid(string, start_position, length);
    -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)

# 6번 위치에서 글자 6개 조회
mysql> select mid('This is mid test',6, 6);
+------------------------------+
| mid('This is mid test',6, 6) |
+------------------------------+
| is mid                       |
+------------------------------+
1 row in set (0.00 sec)

# 끝에서 4번째에서 글자 4개 조회
mysql> select mid('This is mid test', -4, 4);
+--------------------------------+
| mid('This is mid test', -4, 4) |
+--------------------------------+
| test                           |
+--------------------------------+
1 row in set (0.00 sec)

ex) 순위가 11위인 카페 이름에서 앞 2글자만 조회

mysql> select mid(cafe, 1, 2)
    -> from sandwich
    -> where ranking=11;
+-----------------+
| mid(cafe, 1, 2) |
+-----------------+
| Lu              |
+-----------------+
1 row in set (0.00 sec)

LENGTH

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

mysql> select length('This is length test');
+-------------------------------+
| length('This is length test') |
+-------------------------------+
|                            19 |
+-------------------------------+
1 row in set (0.00 sec)

# 공백도 하나의 문자
mysql> select length(' ');
+-------------+
| length(' ') |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)

ex) 순위 10위까지 카페 이름의 길이를 조회

mysql> select length(cafe)
    -> from sandwich
    -> where ranking < 10;
+--------------+
| length(cafe) |
+--------------+
|           11 |
|            9 |
|            4 |
|           11 |
|           22 |
|           31 |
|            6 |
|           17 |
|           14 |
|            4 |
+--------------+
10 rows in set (0.00 sec)

ex) sandwich table에서 순위 3까지의 주소 길이 조회

mysql> select length(address), address
    -> from sandwich
    -> where ranking <= 3;
+-----------------+---------------------+
| length(address) | address             |
+-----------------+---------------------+
|              19 | 2109 W. Chicago Ave |
|              18 | 800 W. Randolph St  |
|              16 |  445 N. Clark St    |
+-----------------+---------------------+
3 rows in set (0.00 sec)

ROUND

지정한 자리까지 숫자를 반올림하는 함수(0이 소수점 첫째 자리)

  • 문법

    select round(number, decimals)
    -number : 반올림할 대상
    -decimals : 반올림할 소수점 위치(0 : 소수 첫째 자리에서 반올림)

# 0이면 소수 첫째 자리에서 반올림 : 소수점이 없도록 반환 하는 것으로 이해하면 쉽다.
mysql> select round(234.43, 0);
+------------------+
| round(234.43, 0) |
+------------------+
|              234 |
+------------------+
1 row in set (0.00 sec)

# 1이면 소수 둘째 자리에서 반올림 : 소수점이 1자리까지 반환 하는 것으로 이해하면 쉽다
mysql> select round(234.43, 1);
+------------------+
| round(234.43, 1) |
+------------------+
|            234.4 |
+------------------+
1 row in set (0.00 sec)

# -1이면 실수 첫째 자리에서 반올림
mysql> select round(234.43, -1);
+-------------------+
| round(234.43, -1) |
+-------------------+
|               230 |
+-------------------+
1 row in set (0.00 sec)

ex) sandwich table에서 소수점을 반올림하여 1달러 단위까지만 표시하여 가장 값이 싼 3개 품목 조회

mysql> 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

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

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2023-00-00 01:55:28 |
+---------------------+
1 row in set (0.00 sec)

FORMAT

숫자 형태를 천단위 콤마가 있는 형식으로 반환하는 함수

  • 문법

    select format(number, decimals);
    -number : 포멧을 적용할 문자 혹은 숫자
    -decimals : 표시할 소수점 위치

# 0은 소수점 없이 반환
mysql> select format(1234.1234, 0);
+----------------------+
| format(1234.1234, 0) |
+----------------------+
| 1,234                |
+----------------------+
1 row in set (0.00 sec)

# 2는 소수점 2자리까지 반환
mysql> select format(1234.1234, 2);
+----------------------+
| format(1234.1234, 2) |
+----------------------+
| 1,234.12             |
+----------------------+
1 row in set (0.00 sec)

# 문자라도 숫자 형태라면 반환 된다.
mysql> select format('1234.1234', 0);
+------------------------+
| format('1234.1234', 0) |
+------------------------+
| 1,234                  |
+------------------------+
1 row in set (0.00 sec)
profile
데이터 굽는 타자기

0개의 댓글