입력값을 기준으로 단일 값을 반환하는 함수
실습은 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)
영문을 대문자로 변환하여 반환하는 함수
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)
영문을 소문자로 변환하여 반환하는 함수
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)
문자열 부분을 반환하는 함수
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)
문자열의 길이를 반환하는 함수
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)
지정한 자리까지 숫자를 반올림하는 함수(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)
현재 날짜 및 시간을 반환하는 함수
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2023-00-00 01:55:28 |
+---------------------+
1 row in set (0.00 sec)
숫자 형태를 천단위 콤마가 있는 형식으로 반환하는 함수
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)