Database/MySQL

MySQL ํ•จ์ˆ˜ ๋ชจ์Œ

UNarD 2026. 3. 19. 18:40

๐Ÿ“‹ MySQL ํ•จ์ˆ˜ ๋ ˆํผ๋Ÿฐ์Šค

์ž์ฃผ ์“ฐ๋Š” ํ•จ์ˆ˜๋“ค์„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ์ •๋ฆฌํ•ด ๋ดค์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š
์ €๋„ ๋ณผ๊ฒธ... ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋„ค์š”!


๐Ÿ”ค ๋ฌธ์ž์—ด ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ์˜ˆ์‹œ
CONCAT(a, b, ...) ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ CONCAT('Hello', ' ', 'World') โ†’ Hello World
CONCAT_WS(sep, a, b, ...) ๊ตฌ๋ถ„์ž ํฌํ•จ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ CONCAT_WS('-', '2026', '03', '20') โ†’ 2026-03-20
LENGTH(str) ๋ฐ”์ดํŠธ ์ˆ˜ ๋ฐ˜ํ™˜ LENGTH('ํ•œ๊ธ€') โ†’ 6
CHAR_LENGTH(str) ๋ฌธ์ž ์ˆ˜ ๋ฐ˜ํ™˜ CHAR_LENGTH('ํ•œ๊ธ€') โ†’ 2
UPPER(str) / UCASE(str) ๋Œ€๋ฌธ์ž ๋ณ€ํ™˜ UPPER('hello') โ†’ HELLO
LOWER(str) / LCASE(str) ์†Œ๋ฌธ์ž ๋ณ€ํ™˜ LOWER('HELLO') โ†’ hello
SUBSTR(str, pos, len) ๋ฌธ์ž์—ด ์ถ”์ถœ SUBSTR('abcdef', 2, 3) โ†’ bcd
LEFT(str, n) ์™ผ์ชฝ์—์„œ n๊ธ€์ž ์ถ”์ถœ LEFT('abcdef', 3) โ†’ abc
RIGHT(str, n) ์˜ค๋ฅธ์ชฝ์—์„œ n๊ธ€์ž ์ถ”์ถœ RIGHT('abcdef', 3) โ†’ def
INSTR(str, substr) ํŠน์ • ๋ฌธ์ž ์œ„์น˜ ๋ฐ˜ํ™˜ INSTR('hello', 'l') โ†’ 3
LOCATE(substr, str) ํŠน์ • ๋ฌธ์ž ์œ„์น˜ ๋ฐ˜ํ™˜ (์ธ์ž ์ˆœ์„œ ๋ฐ˜๋Œ€) LOCATE('l', 'hello') โ†’ 3
INSERT(str, pos, len, new) ํŠน์ • ์œ„์น˜ ๋ฌธ์ž์—ด ๊ต์ฒด INSERT('abcdef', 2, 3, 'XYZ') โ†’ aXYZef
REPLACE(str, from, to) ํŠน์ • ๋ฌธ์ž์—ด ๊ต์ฒด REPLACE('aabbcc', 'bb', 'XX') โ†’ aaXXcc
REPEAT(str, n) ๋ฌธ์ž์—ด n๋ฒˆ ๋ฐ˜๋ณต REPEAT('ab', 3) โ†’ ababab
SUBSTRING_INDEX(str, delim, n) ๊ตฌ๋ถ„์ž ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ SUBSTRING_INDEX('a,b,c', ',', 2) โ†’ a,b
TRIM(str) ์•ž๋’ค ๊ณต๋ฐฑ ์ œ๊ฑฐ TRIM(' hi ') โ†’ hi
LTRIM(str) ์™ผ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ LTRIM(' hi ') โ†’ hi
RTRIM(str) ์˜ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ RTRIM(' hi ') โ†’ hi
SPACE(n) n๊ฐœ์˜ ๊ณต๋ฐฑ ๋ฐ˜ํ™˜ SPACE(3) โ†’
LPAD(str, len, pad) ์™ผ์ชฝ์— ๋ฌธ์ž ์ฑ„์šฐ๊ธฐ LPAD('5', 3, '0') โ†’ 005
RPAD(str, len, pad) ์˜ค๋ฅธ์ชฝ์— ๋ฌธ์ž ์ฑ„์šฐ๊ธฐ RPAD('5', 3, '0') โ†’ 500
FORMAT(num, d) ์ˆซ์ž๋ฅผ ํฌ๋งท ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ FORMAT(1000000, 0) โ†’ 1,000,000
REVERSE(str) ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ REVERSE('abc') โ†’ cba
STRCMP(s1, s2) ๋ฌธ์ž์—ด ๋น„๊ต STRCMP('abc', 'abc') โ†’ 0

๐Ÿ“… ๋‚ ์งœ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ์˜ˆ์‹œ
CURDATE() ํ˜„์žฌ ๋‚ ์งœ ๋ฐ˜ํ™˜ 2026-03-20
CURTIME() ํ˜„์žฌ ์‹œ๊ฐ„ ๋ฐ˜ํ™˜ 14:30:00
NOW() ํ˜„์žฌ ๋‚ ์งœ + ์‹œ๊ฐ„ ๋ฐ˜ํ™˜ 2026-03-20 14:30:00
YEAR(date) ์—ฐ๋„ ์ถ”์ถœ YEAR('2026-03-20') โ†’ 2026
MONTH(date) ์›” ์ถ”์ถœ MONTH('2026-03-20') โ†’ 3
MONTHNAME(date) ์›” ์ด๋ฆ„ ๋ฐ˜ํ™˜ MONTHNAME('2026-03-20') โ†’ March
DAY(date) ์ผ ์ถ”์ถœ DAY('2026-03-20') โ†’ 20
HOUR(time) ์‹œ ์ถ”์ถœ HOUR('14:30:00') โ†’ 14
MINUTE(time) ๋ถ„ ์ถ”์ถœ MINUTE('14:30:00') โ†’ 30
DAYNAME(date) ์š”์ผ ์ด๋ฆ„ ๋ฐ˜ํ™˜ DAYNAME('2026-03-20') โ†’ Thursday
DAYOFWEEK(date) ์š”์ผ ์ˆซ์ž ๋ฐ˜ํ™˜ (์ผ=1) DAYOFWEEK('2026-03-20') โ†’ 5
WEEK(date) ํ•ด๋‹น ์—ฐ๋„์˜ ๋ช‡ ๋ฒˆ์งธ ์ฃผ์ธ์ง€ ๋ฐ˜ํ™˜ WEEK('2026-03-20') โ†’ 12
QUARTER(date) ๋ถ„๊ธฐ ๋ฐ˜ํ™˜ (1~4) QUARTER('2026-03-20') โ†’ 1
DATE_ADD(date, INTERVAL n unit) ๋‚ ์งœ ๋”ํ•˜๊ธฐ DATE_ADD(CURDATE(), INTERVAL 1 YEAR)
DATE_SUB(date, INTERVAL n unit) ๋‚ ์งœ ๋นผ๊ธฐ DATE_SUB(CURDATE(), INTERVAL 10 DAY)
DATEDIFF(d1, d2) ๋‚ ์งœ ์ฐจ์ด (์ผ ์ˆ˜) DATEDIFF('2026-12-31', CURDATE())
TIMEDIFF(t1, t2) ๋‘ ์‹œ๊ฐ„์˜ ์ฐจ์ด ๋ฐ˜ํ™˜ TIMEDIFF('14:30:00', '12:00:00') โ†’ 02:30:00
DATE_FORMAT(date, format) ๋‚ ์งœ ํ˜•์‹ ์ง€์ • DATE_FORMAT(NOW(), '%Y๋…„ %m์›” %d์ผ')
STR_TO_DATE(str, format) ๋ฌธ์ž์—ด์„ ๋‚ ์งœ๋กœ ๋ณ€ํ™˜ STR_TO_DATE('20-03-2026', '%d-%m-%Y') โ†’ 2026-03-20
EXTRACT(unit FROM date) ๋‚ ์งœ์—์„œ ํŠน์ • ๋‹จ์œ„ ์ถ”์ถœ EXTRACT(MONTH FROM '2026-03-20') โ†’ 3
LAST_DAY(date) ํ•ด๋‹น ์›”์˜ ๋งˆ์ง€๋ง‰ ๋‚  ๋ฐ˜ํ™˜ LAST_DAY('2026-03-20') โ†’ 2026-03-31
TIMESTAMPDIFF(unit, d1, d2) ๋‘ ๋‚ ์งœ ์ฐจ์ด๋ฅผ ๋‹จ์œ„๋กœ ๋ฐ˜ํ™˜ TIMESTAMPDIFF(YEAR, birthday, NOW())

๐Ÿ”ธ DATE_FORMAT ์ฃผ์š” ํฌ๋งท ์ฝ”๋“œ

์ฝ”๋“œ ์„ค๋ช… ์˜ˆ์‹œ
%Y 4์ž๋ฆฌ ์—ฐ๋„ 2026
%m 2์ž๋ฆฌ ์›” 03
%c 1~2์ž๋ฆฌ ์›” 3
%d 2์ž๋ฆฌ ์ผ 20
%H 24์‹œ๊ฐ„์ œ ์‹œ 14
%i ๋ถ„ 30
%s ์ดˆ 00
%W ์š”์ผ ์ „์ฒด ์ด๋ฆ„ Thursday
%a ์š”์ผ ์ถ•์•ฝ Thu

๐Ÿ”ธ INTERVAL ์ฃผ์š” ๋‹จ์œ„

๋‹จ์œ„ ์˜๋ฏธ ์˜ˆ์‹œ
YEAR ๋…„ INTERVAL 1 YEAR โ†’ 1๋…„ ํ›„
MONTH ์›” INTERVAL 3 MONTH โ†’ 3๊ฐœ์›” ํ›„
DAY ์ผ INTERVAL 10 DAY โ†’ 10์ผ ํ›„
HOUR ์‹œ INTERVAL 2 HOUR โ†’ 2์‹œ๊ฐ„ ํ›„
MINUTE ๋ถ„ INTERVAL 30 MINUTE โ†’ 30๋ถ„ ํ›„
SECOND ์ดˆ INTERVAL 30 SECOND โ†’ 30์ดˆ ํ›„

๐Ÿ”ข ์ˆซ์ž ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ์˜ˆ์‹œ
ROUND(num, d) ๋ฐ˜์˜ฌ๋ฆผ ROUND(3.567, 2) โ†’ 3.57
FLOOR(num) ๋‚ด๋ฆผ FLOOR(3.9) โ†’ 3
CEIL(num) ์˜ฌ๋ฆผ CEIL(3.1) โ†’ 4
ABS(num) ์ ˆ๋Œ“๊ฐ’ ABS(-5) โ†’ 5
MOD(a, b) ๋‚˜๋จธ์ง€ MOD(10, 3) โ†’ 1
SQRT(num) ์ œ๊ณฑ๊ทผ SQRT(9) โ†’ 3
RAND() 0~1 ์‚ฌ์ด ๋‚œ์ˆ˜ ๋ฐ˜ํ™˜ RAND() โ†’ 0.723...
TRUNCATE(num, d) ์†Œ์ˆ˜์  ์ดํ•˜ ๋ฒ„๋ฆผ TRUNCATE(3.999, 1) โ†’ 3.9
POW(x, y) x์˜ y์ œ๊ณฑ POW(2, 3) โ†’ 8
GREATEST(a, b, ...) ์—ฌ๋Ÿฌ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’ GREATEST(3, 7, 5) โ†’ 7
LEAST(a, b, ...) ์—ฌ๋Ÿฌ ๊ฐ’ ์ค‘ ์ตœ์†Ÿ๊ฐ’ LEAST(3, 7, 5) โ†’ 3
SIGN(num) ์–‘์ˆ˜ 1, 0์€ 0, ์Œ์ˆ˜ -1 ๋ฐ˜ํ™˜ SIGN(-5) โ†’ -1
PI() ํŒŒ์ด๊ฐ’ ๋ฐ˜ํ™˜ PI() โ†’ 3.141593
LOG(x) / LOG(b, x) ์ž์—ฐ๋กœ๊ทธ / ๋ฐ‘์ด b์ธ ๋กœ๊ทธ LOG(100, 10) โ†’ 2
EXP(x) e์˜ x์ œ๊ณฑ EXP(1) โ†’ 2.718...

๐Ÿ› ๏ธ NULL ์ฒ˜๋ฆฌ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ์˜ˆ์‹œ
IFNULL(val, replace) NULL์ด๋ฉด ๋Œ€์ฒด๊ฐ’ ๋ฐ˜ํ™˜ IFNULL(NULL, 0) โ†’ 0
NULLIF(a, b) a์™€ b๊ฐ€ ๊ฐ™์œผ๋ฉด NULL ๋ฐ˜ํ™˜ NULLIF(0, 0) โ†’ NULL
COALESCE(v1, v2, ...) ์ฒซ ๋ฒˆ์งธ non-NULL ๊ฐ’ ๋ฐ˜ํ™˜ COALESCE(NULL, NULL, 3) โ†’ 3

โš™๏ธ ๊ธฐํƒ€ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ์˜ˆ์‹œ
IF(cond, true, false) ์กฐ๊ฑด ๋ถ„๊ธฐ IF(score >= 60, 'ํ•ฉ๊ฒฉ', '๋ถˆํ•ฉ๊ฒฉ')
CAST(val AS type) ํƒ€์ž… ๋ณ€ํ™˜ CAST('123' AS UNSIGNED) โ†’ 123
CONVERT(val, type) ํƒ€์ž…/๋ฌธ์ž์…‹ ๋ณ€ํ™˜ CONVERT('123', UNSIGNED) โ†’ 123
DATABASE() ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ DB๋ช… ๋ฐ˜ํ™˜ DATABASE() โ†’ mydb
USER() ํ˜„์žฌ ์ ‘์† ์‚ฌ์šฉ์ž ๋ฐ˜ํ™˜ USER() โ†’ root@localhost
VERSION() MySQL ๋ฒ„์ „ ๋ฐ˜ํ™˜ VERSION() โ†’ 8.0.33
UUID() ๊ณ ์œ  ์‹๋ณ„์ž ์ƒ์„ฑ UUID() โ†’ 550e8400-e29b-...

๐Ÿ“š ์ฐธ๊ณ ์ž๋ฃŒ

'Database > MySQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Mac์—์„œ MySQL ์„ค์น˜ํ•˜๊ธฐ (feat. Homebrew)  (0) 2026.03.21