Post

MySQL Functions 2

Cheat Sheet



Link
overapi.com/
dev.mysql.com/doc/refman/8.0/en/functions.html

mysql에 5.6, 5.7, 8.0 3가지 매뉴얼이 있음.






써 본 것 정리

BETWEEN … AND …



1
2
3
4
5
6
7
8
9
10
11
12
13
14
expr BETWEEN min AND max
-> min <= expr => max 이면 1, 아니면 0 리턴.


mysql> SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;
        -> 1, 0
mysql> SELECT 1 BETWEEN 2 AND 3;
        -> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
        -> 0






INSTR



1
2
3
4
5
6
7
INSTR(str,substr), locate(substr,str)와 동일
-> str에 있는 substr의 첫 인덱스를 찾음.

mysql> SELECT INSTR('foobarbar', 'bar');
        -> 4
mysql> SELECT INSTR('xbar', 'foobar');
        -> 0






LOCATE



1
2
3
4
LOCATE(substr,str), LOCATE(substr,str,시작점)
  
  -> str에 있는 substr의 첫 인덱스를 찾음.
  -> str의 시작점에서부터 substr의 첫 인덱스를 찾음.


1
2
3
4
5
6
7
8
mysql> SELECT LOCATE('bar', 'foobarbar');
        -> 4

mysql> SELECT LOCATE('xbar', 'foobar');
        -> 0

mysql> SELECT LOCATE('bar', 'foobarbar', 5);
        -> 7






SLEEP



1
2
3
4
5
6
7
SLEEP(duration)
  -> 레코드 당 정해진 초 동안 지연
  -> 정상종료 시 0, 그 외에는 1 리턴


mysql> SELECT SLEEP(1000);
        -> 0






BENCHMARK



1
2
3
4
5
6
7
8
9
10
11
BENCHMARK(count,expr)
-> expr을 count만큼 반복
-> Mysql이 expr을 얼마나 빨리 실행하는지 시간을 재며, 항상 0을 리턴.

mysql> SELECT BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye'));
+---------------------------------------------------+
| BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye')) |
+---------------------------------------------------+
|                                                 0 |
+---------------------------------------------------+
1 row in set (4.74 sec)






DATABASE, SCHEMA



1
2
3
4
5
6
DATABASE() 또는 SCHEMA()
  -> 현재 데이터베이스 이름 리턴. 
  -> 기본 데이터베이스가 없으면 NULL 리턴.

mysql> SELECT DATABASE();
        -> 'test'






VERSION



1
2
3
4
5
VERSION()
-> mysql 버젼 리턴

mysql> SELECT VERSION();
        -> '8.0.24-standard'






USER, SYSTEM_USER, SESSION_USER



1
2
3
4
5
USER() == SYSTEM_USER() == SESSION_USER()
-> 'utf-8'로 mysql 유저와 호스트 이름 리턴

mysql> SELECT USER();
        -> 'davida@localhost'






REPLACE



1
2
3
4
REPLACE(str,from_str,to_str)

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'






INSERT



1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT(str,시작 위치,len,newstr)
  -> str에서 시작 위치에서 len만큼 newstr로 변경
  -> 인자 중 NULL이 있으면 NULL 리턴


mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
        -> 'QuWhattic'

mysql> SELECT INSERT('Quadratic', -1, 4, 'What');
        -> 'Quadratic'

mysql> SELECT INSERT('Quadratic', 3, 100, 'What');
        -> 'QuWhat






LEAST



  • 주어진 여러 인자중에서 가장 최소인 값을 반환


1
2
3
4
5
6
7
8
9
10
LEAST(value1, value2....)

 mysql> SELECT LEAST(2,0);
      -> 0

 mysql> SELECT LEAST(34.0, 3.0, 5.0, 767.0);
      -> 3.0

 mysql> SELECT LEAST("A", "B", "C");
      -> A






JSON_ARRAYAGG



  • group_concat이 필터링 되었을 때 사용하였음.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
JSON_ARRAYAGG(col_or_expr)

+------+-----------+-------+
| o_id | attribute | value |
+------+-----------+-------+
|    2 | color     | red   |
|    2 | fabric    | silk  |
|    3 | color     | green |
|    3 | shape     | square|
+------+-----------+-------+

mysql> SELECT o_id, JSON_ARRAYAGG(attribute) AS attributes
     > FROM t3 GROUP BY o_id;
+------+---------------------+
| o_id | attributes          |
+------+---------------------+
|    2 | ["color", "fabric"] |
|    3 | ["color", "shape"]  |
+------+---------------------+






JSON_OBJECTAGG



  • group_concat이 필터링 되었을 때 사용하였음.
1
2
3
4
5
6
7
8
9
10
JSON_OBJECTAGG(key, value)

mysql> SELECT o_id, JSON_OBJECTAGG(attribute, value)
     > FROM t3 GROUP BY o_id;
+------+---------------------------------------+
| o_id | JSON_OBJECTAGG(attribute, value)      |
+------+---------------------------------------+
|    2 | {"color": "red", "fabric": "silk"}    |
|    3 | {"color": "green", "shape": "square"} |
+------+---------------------------------------+


json_objectagg 함수 사용 시 알아야 하는 점이 있음.

key 값이 중복이 되어 있을 때 select 했을 때 마지막 값만 나온다는 것임.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT c, i FROM t;
+------+------+
| c    | i    |
+------+------+
| key  |    3 |
| key  |    4 |
| key  |    5 |
+------+------+

mysql> SELECT JSON_OBJECTAGG(c, i) FROM t;
+----------------------+
| JSON_OBJECTAGG(c, i) |
+----------------------+
| {"key": 5}           |
+----------------------+


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> INSERT INTO t VALUES ('key', 3), ('key', 5), ('key', 4);
mysql> SELECT c, i FROM t;
+------+------+
| c    | i    |
+------+------+
| key  |    3 |
| key  |    5 |
| key  |    4 |
+------+------+

mysql> SELECT JSON_OBJECTAGG(c, i) FROM t;
+----------------------+
| JSON_OBJECTAGG(c, i) |
+----------------------+
| {"key": 4}           |
+----------------------+






This post is licensed under CC BY 4.0 by the author.