2020. 7. 21. 16:02ㆍDB/MySQL
MySQL에서 기본적으로 제공해주는 숫자관련 함수를 알아봅시다.
나눗셈 관련 함수
DIV
Integer division
산수연산자 중 +, -, *은 우리가 익히 잘 알고있는 대로 동작되며,
나머지 연산에 관한 %(= MOD) 역시 기존의 산수 연산과 차이가 없습니다.
다만, 두 수를 나눈 후 몫을 표현 하는 2가지 방법인 /
와 DIV
기능에 차이점이 하나 있는데,
mysql> SELECT 837/7, 837 DIV 7; +----------+-----------+ | 837/7 | 837 DIV 7 | +----------+-----------+ | 119.5714 | 119 | +----------+-----------+
/
는 소수점 4자리까지 표현한다면, DIV
는 소수부분을 버림처리한다는 차이점이 있습니다.
MOD
MOD(N, M)
or N MOD M
or N % M
N을 M으로 나눈 후 나머지를 반환합니다.
mysql> SELECT MOD(11,3), 91 MOD 4, 33 % 5; +-----------+----------+--------+ | MOD(11,3) | 91 MOD 4 | 33 % 5 | +-----------+----------+--------+ | 2 | 3 | 3 | +-----------+----------+--------+
SIGN
SIGN(N)
양수면 1, 음수면 0, 0은 0을 반환합니다.
mysql> SELECT SIGN(-222), SIGN(0), SIGN(100); +------------+---------+-----------+ | SIGN(-222) | SIGN(0) | SIGN(100) | +------------+---------+-----------+ | -1 | 0 | 1 | +------------+---------+-----------+
ABS
ABS(x)
절대값을 반환합니다.
입력값이 잘못되었을 경우 0을 반환합니다.
mysql> SELECT ABS(-12), ABS(12), ABS('jini'); +----------+---------+-------------+ | ABS(-12) | ABS(12) | ABS('jini') | +----------+---------+-------------+ | 12 | 12 | 0 | +----------+---------+-------------+
올림, 내림, 반올림
CEIL(= CEILING)
CEIL(x)
소수점 올림.
입력값 x보다 작지않은 정수의 최소값
mysql> SELECT CEIL(1.75), CEIL(1.25), CEIL(-1.75), CEIL(-1.25); +------------+------------+-------------+-------------+ | CEIL(1.75) | CEIL(1.25) | CEIL(-1.75) | CEIL(-1.25) | +------------+------------+-------------+-------------+ | 2 | 2 | -1 | -1 | +------------+------------+-------------+-------------+
FLOOR
FLOOR(x)
소수점 내림(버림)
입력값 x보다 크지않은 정수의 최대값
mysql> SELECT FLOOR(1.75), FLOOR(1.25), FLOOR(-1.75), FLOOR(-1.25); +-------------+-------------+--------------+--------------+ | FLOOR(1.75) | FLOOR(1.25) | FLOOR(-1.75) | FLOOR(-1.25) | +-------------+-------------+--------------+--------------+ | 1 | 1 | -2 | -2 | +-------------+-------------+--------------+--------------+
TRUNCATE
TRUNCATE(X, D)
소수점 자리수 버림
mysql> SELECT TRUNCATE(987.56789, 0), TRUNCATE(987.56789, 3), TRUNCATE(987.56789, -2); +------------------------+------------------------+-------------------------+ | TRUNCATE(987.56789, 0) | TRUNCATE(987.56789, 3) | TRUNCATE(987.56789, -2) | +------------------------+------------------------+-------------------------+ | 987 | 987.567 | 900 | +------------------------+------------------------+-------------------------+
ROUND
ROUND(x), ROUND(x,D)
반올림
5보다 크거나 같을 올림, 4보다 작거나 같을 경우 내림
D의 기본값은 0입니다.
mysql> SELECT ROUND(1.75), ROUND(1.25), ROUND(-1.75), ROUND(-1.25); +-------------+-------------+--------------+--------------+ | ROUND(1.75) | ROUND(1.25) | ROUND(-1.75) | ROUND(-1.25) | +-------------+-------------+--------------+--------------+ | 2 | 1 | -2 | -1 | +-------------+-------------+--------------+--------------+
mysql> SELECT ROUND(16273.27384), ROUND(16273.27384, 1), ROUND(16273.27384, 2), ROUND(16273.27384, 3); +--------------------+-----------------------+-----------------------+-----------------------+ | ROUND(16273.27384) | ROUND(16273.27384, 1) | ROUND(16273.27384, 2) | ROUND(16273.27384, 3) | +--------------------+-----------------------+-----------------------+-----------------------+ | 16273 | 16273.3 | 16273.27 | 16273.274 | +--------------------+-----------------------+-----------------------+-----------------------+
D>=0 일 때에는 소수점 D+1 자리에서 반올림하기
mysql> SELECT ROUND(16273.27384, -1), ROUND(16273.27384, -2), ROUND(16273.27384, -3); +------------------------+------------------------+------------------------+ | ROUND(16273.27384, -1) | ROUND(16273.27384, -2) | ROUND(16273.27384, -3) | +------------------------+------------------------+------------------------+ | 16270 | 16300 | 16000 | +------------------------+------------------------+------------------------+
D<0 일 때에는 실수부분의 D 자리에서 반올림 하기
PI
π 값을 반환합니다.
기본 표시값은 7자리(정수 포함) 이지만 ROUND함수 또는 0.0000000000
와 같은 소수의 덧셈 연산을 통해 표시값을 늘릴 수 있습니다.
mysql> select PI(), PI()/2; +----------+--------------+ | PI() | PI()/2 | +----------+--------------+ | 3.141593 | 1.5707963268 | +----------+--------------+
기본적으로 PI()는 소수점 6자리까지 나타내고,
PI를 나눈 값은 소수점 10자리까지 나타냅니다.
mysql> SELECT ROUND(PI(), 15) π, ROUND(PI()/2, 15) `π/2`; +-------------------+-------------------+ | π | π/2 | +-------------------+-------------------+ | 3.141592653589793 | 1.570796326794896 | +-------------------+-------------------+
만일 소수점을 더 많이 확인하고 싶다면, ROUND함수를 이용하면 됩니다.
삼각함수
SIN
mysql> SELECT SIN(0), ROUND(SIN(PI()/2)), ROUND(SIN(PI())); +--------+--------------------+------------------+ | SIN(0) | ROUND(SIN(PI()/2)) | ROUND(SIN(PI())) | +--------+--------------------+------------------+ | 0 | 1 | 0 | +--------+--------------------+------------------+
COS
mysql> SELECT COS(0), ROUND(COS(PI()/2)), ROUND(COS(PI())); +--------+--------------------+------------------+ | COS(0) | ROUND(COS(PI()/2)) | ROUND(COS(PI())) | +--------+--------------------+------------------+ | 1 | 0 | -1 | +--------+--------------------+------------------+
TAN
mysql> SELECT TAN(0), ROUND(TAN(PI()/2)), ROUND(TAN(PI())); +--------+--------------------+------------------+ | TAN(0) | ROUND(TAN(PI()/2)) | ROUND(TAN(PI())) | +--------+--------------------+------------------+ | 0 | 16331239353195370 | -0 | +--------+--------------------+------------------+
ASIN
arcsin
SELECT ASIN(-1), ASIN(0), ASIN(1); +---------------------+---------+--------------------+ | ASIN(-1) | ASIN(0) | ASIN(1) | +---------------------+---------+--------------------+ | -1.5707963267948966 | 0 | 1.5707963267948966 | +---------------------+---------+--------------------+
※ π/2 = 1.570796326794896
ACOS
arccos
mysql> SELECT ACOS(-1), ACOS(0), ACOS(1); +-------------------+--------------------+---------+ | ACOS(-1) | ACOS(0) | ACOS(1) | +-------------------+--------------------+---------+ | 3.141592653589793 | 1.5707963267948966 | 0 | +-------------------+--------------------+---------+
ATAN
arctan
mysql> SELECT ATAN(-50), ATAN(0), ATAN(50); +--------------------+---------+-------------------+ | ATAN(-50) | ATAN(0) | ATAN(50) | +--------------------+---------+-------------------+ | -1.550798992821746 | 0 | 1.550798992821746 | +--------------------+---------+-------------------+
COT
cotangent
mysql> SELECT ROUND(COT(-PI()/2)), COT(1), ROUND(COT(PI()/2)); +---------------------+--------------------+--------------------+ | ROUND(COT(-PI()/2)) | COT(1) | ROUND(COT(PI()/2)) | +---------------------+--------------------+--------------------+ | -0 | 0.6420926159343306 | 0 | +---------------------+--------------------+--------------------+
mysql> SELECT COT(0); ERROR 1690 (22003): DOUBLE value is out of range in 'cot(0)'
COT(0)은 무한대이기 때문에 조회시 out of range 에러가 발생합니다.
CONV
CONV(N, from_base, to_base)
from_base 진수인 N을 to_base 진수로 변환합니다. (2<=N<=36)
mysql> SELECT CONV('1110',2,10), CONV('AE',16,10), CONV('AE',16,2); +-------------------+------------------+-----------------+ | CONV('1110',2,10) | CONV('AE',16,10) | CONV('AE',16,2) | +-------------------+------------------+-----------------+ | 14 | 174 | 10101110 | +-------------------+------------------+-----------------+
CRC32
CRC 값을 반환합니다.
※ CRC32 : 파일 변조 여부 검사를 위한 검사법
mysql> SELECT CRC32('jiniworld'), CRC32('Jiniworld'); +--------------------+--------------------+ | CRC32('jiniworld') | CRC32('Jiniworld') | +--------------------+--------------------+ | 3905366896 | 1781967315 | +--------------------+--------------------+
각도 관련 함수
DEGREES
DEGREES(X)
X라디안을 도(°)로 변환한 것
※ 1 라디안 : 원의 반지름과 길이가 같은 호에 대한 중심각
mysql> SELECT DEGREES(PI()), DEGREES(PI()/2); +---------------+-----------------+ | DEGREES(PI()) | DEGREES(PI()/2) | +---------------+-----------------+ | 180 | 90 | +---------------+-----------------+
RADIANS
RADIANS(X)
도(°)를 라디안으로 변환한 것
mysql> SELECT RADIANS(90), RADIANS(180); +--------------------+-------------------+ | RADIANS(90) | RADIANS(180) | +--------------------+-------------------+ | 1.5707963267948966 | 3.141592653589793 | +--------------------+-------------------+
EXP
EXP(X)
자연상수 e의 X 거듭제곱 값()을 반환
이 함수의 반대는 LN(= LOG)함수입니다.
mysql> SELECT EXP(1), EXP(2), EXP(0), EXP(-2); +-------------------+------------------+--------+--------------------+ | EXP(1) | EXP(2) | EXP(0) | EXP(-2) | +-------------------+------------------+--------+--------------------+ | 2.718281828459045 | 7.38905609893065 | 1 | 0.1353352832366127 | +-------------------+------------------+--------+--------------------+
로그 함수
LN(= LOG)
LN(X)
자연로그 값( = )을 반환
※ 자연로그 : 밑이 인 로그
참고로 로그는 모두 0이상의 값에서 유효합니다.
mysql> SELECT LN(-1), LN(1), LN(10); +--------+-------+-------------------+ | LN(-1) | LN(1) | LN(10) | +--------+-------+-------------------+ | NULL | 0 | 2.302585092994046 | +--------+-------+-------------------+
LOG2
※ 상용로그 : 밑이 2인 로그
mysql> SELECT LOG2(0), LOG2(2), LOG2(8); +---------+---------+---------+ | LOG2(0) | LOG2(2) | LOG2(8) | +---------+---------+---------+ | NULL | 1 | 3 | +---------+---------+---------+
LOG10
상용로그 값()을 반환
※ 상용로그 : 밑이 10인 로그
mysql> SELECT LOG10(1), LOG10(10), LOG10(100); +----------+-----------+------------+ | LOG10(1) | LOG10(10) | LOG10(100) | +----------+-----------+------------+ | 0 | 1 | 2 | +----------+-----------+------------+
제곱근 관련 함수
SQRT
SQRT(x)
제곱근. 제곱하여 x가 되는 값을 반환합니다.
x값은 0이상의 값이어야하며, 부적절한 값을 넣을 경우 NULL을 반환합니다.
mysql> SELECT SQRT(9), SQRT(12), SQRT(-9), SQRT(0); +---------+--------------------+----------+---------+ | SQRT(9) | SQRT(12) | SQRT(-9) | SQRT(0) | +---------+--------------------+----------+---------+ | 3 | 3.4641016151377544 | NULL | 0 | +---------+--------------------+----------+---------+
POW(= POWER)
POW(N, M)
N의 M 거듭제곱을 반환합니다.()
mysql> SELECT POW(2,3), POW(10,3); +----------+-----------+ | POW(2,3) | POW(10,3) | +----------+-----------+ | 8 | 1000 | +----------+-----------+
++
- MySQL Numeric Functions
'DB > MySQL' 카테고리의 다른 글
[MySQL] mysql_config_editor를 이용한 자격정보 저장 (login-path) (0) | 2020.10.26 |
---|---|
[MySQL Function] 암호화 알고리즘(AES, MD5, SHA1, SHA2) (0) | 2020.07.22 |
[MySQL Function] 날짜, 시간 함수 (0) | 2020.04.28 |
[MySQL] 3. user(계정) 생성, 로그인, 변경, 삭제 (6) | 2020.04.23 |
[MySQL] sql_mode로 알아보는 시스템 변수 permanent, runtime설정 (1) | 2020.03.16 |