[MySQL Function] 숫자 함수

2020. 7. 21. 16:02DB/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

01

mysql> SELECT SIN(0), ROUND(SIN(PI()/2)), ROUND(SIN(PI()));                    
+--------+--------------------+------------------+
| SIN(0) | ROUND(SIN(PI()/2)) | ROUND(SIN(PI())) |
+--------+--------------------+------------------+
|      0 |                  1 |                0 |
+--------+--------------------+------------------+

COS

02

mysql> SELECT COS(0), ROUND(COS(PI()/2)), ROUND(COS(PI()));
+--------+--------------------+------------------+
| COS(0) | ROUND(COS(PI()/2)) | ROUND(COS(PI())) |
+--------+--------------------+------------------+
|      1 |                  0 |               -1 |
+--------+--------------------+------------------+

TAN

03

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

04

SELECT ASIN(-1), ASIN(0), ASIN(1);
+---------------------+---------+--------------------+
| ASIN(-1)            | ASIN(0) | ASIN(1)            |
+---------------------+---------+--------------------+
| -1.5707963267948966 |       0 | 1.5707963267948966 |
+---------------------+---------+--------------------+

※ π/2 = 1.570796326794896


ACOS

arccos

05

mysql> SELECT ACOS(-1), ACOS(0), ACOS(1);
+-------------------+--------------------+---------+
| ACOS(-1)          | ACOS(0)            | ACOS(1) |
+-------------------+--------------------+---------+
| 3.141592653589793 | 1.5707963267948966 |       0 |
+-------------------+--------------------+---------+

ATAN

arctan

06

mysql> SELECT ATAN(-50), ATAN(0), ATAN(50);
+--------------------+---------+-------------------+
| ATAN(-50)          | ATAN(0) | ATAN(50)          |
+--------------------+---------+-------------------+
| -1.550798992821746 |       0 | 1.550798992821746 |
+--------------------+---------+-------------------+

COT

cotangent

07

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 거듭제곱 값(eXe^X)을 반환
이 함수의 반대는 LN(= LOG)함수입니다.

e1=e=2.718281828459045e0=e^1 = e = 2.718281828459045\\ e^0 =

09

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)

자연로그 값(lnXlnX = logeXlog_{e}X)을 반환
※ 자연로그 : 밑이 ee 인 로그

참고로 로그는 모두 0이상의 값에서 유효합니다.

lnX=YeY=XlnX = Y\\ e^Y = X

08

mysql> SELECT LN(-1), LN(1), LN(10);
+--------+-------+-------------------+
| LN(-1) | LN(1) | LN(10)            |
+--------+-------+-------------------+
|   NULL |     0 | 2.302585092994046 |
+--------+-------+-------------------+

LOG2

※ 상용로그 : 밑이 2인 로그

11

mysql> SELECT LOG2(0), LOG2(2), LOG2(8);
+---------+---------+---------+
| LOG2(0) | LOG2(2) | LOG2(8) |
+---------+---------+---------+
|    NULL |       1 |       3 |
+---------+---------+---------+

LOG10

상용로그 값(log10Xlog_{10}X)을 반환
※ 상용로그 : 밑이 10인 로그

log10X=Y10Y=Xlog_{10}X = Y\\ 10^Y = X

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 거듭제곱을 반환합니다.(NMN^M)

mysql> SELECT POW(2,3), POW(10,3);
+----------+-----------+
| POW(2,3) | POW(10,3) |
+----------+-----------+
|        8 |      1000 |
+----------+-----------+

++

  • MySQL Numeric Functions
728x90
반응형