IT Story/SQL Story

SQL 함수: 수학 함수

bravesong 2022. 12. 5. 16:59

절댓값 구하기: ABS 함수

SELECT ABS(-1.0), ABS(0.0), ABS(1.0)

SELECT open_price - close_price As diff,

ABS(open_price - close_price) As abs_diff

FROM nasdaq_comany

결과

diff                                          abs_diff
23.2763671875                  23.2763671875
-59.19921875                     59.19921875
-24.0498046875                 24.0498046875

 

양수 음수 여부 판단하기: SIGN 함수

SELECT SIGN(-125), SIGN(0), SIGN(564)

(열 이름 없음) (열 이름 없음) (열 이름 없음)
-1                        0                          1

 

천장값과 바닥값 구하기: CEILING, FLOOOR 함수

CEILING 함수는 천장값을 구하는데, 지정한 숫자보다 크거나 같은 최소 정수를 반환한다.

FLOOR 함수는 바닥값을 구하는데, 지정한 숫자보다 작거나 같은 최대 정수를 반환한다. 가령, 2.4라면 2를 반환한다.

SELECT CEILING(123.45), CEILING(-123.450), CEILING($0.0);

(열 이름 없음) (열 이름 없음) (열 이름 없음)
124                   -123                 0.00

SELECT FLOOR(123.45), FLOOR(-123.450), FLOOR ($123.45);

(열 이름 없음) (열 이름 없음) (열 이름 없음)
123                 -124                     123.00

 

반올림 구하기: ROUND 함수

ROUND 함수 기본 형식
ROUND (numeric_expression, length, [, fucntion])

length: 반올림해 표현한 자릿수

[, fucntion]: 수행할 연산의 종류, tinyint, smallint, int형 값을 사용하며 생략하면 기본값 0을 적용. 기본값 0은 반올림 결괏값을 자르지 않는다.

SELECT ROUND(123.9994, 3), ROUND(123.9995, 3)

(열 이름 없음) (열 이름 없음)
123.9990            124.0000

SELECT ROUND(123.4545, 2), ROUND(123.45, -2)

(열 이름 없음) (열 이름 없음)
123.4500           100.00

음수(-2)는 정수부를 기준으로 반올림을 한다.

SELECT ROUND(123.75, 0), ROUND(123.75, 0,1)

(열 이름 없음) (열 이름 없음)
124.00            123.00

세번째 자리에 1을 전달한 쿼리는 반올림한 소숫점 첫번째 자리(123.8)를 표현하나, 두번째 자리가 0이므로, 정수 첫번째 자리를 기준으로 반올림하기 때문에, 123.00이 된다.

ROUND 함수는 length에 음수를 전달할 경우, 정수부 길이보다 절댓값이 큰 값을 전달하면 0을 반환한다.

SELECT ROUND(748.58, -1), ROUND(748.58, -2), ROUND(748.58, -4)

(열 이름 없음) (열 이름 없음) (열 이름 없음)
750.00             700.00              0.00

또한 length에 음수를 전달할 때 정수부의 길이와 절댓값이 같은 음수를 전달하면 에러가 발생한다.

SELECT ROUND(748.58, -3),

expression을(를) 데이터 형식 numeric(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.

748.58은 1000.00을 반환할 수 없기 때문이다.

로그 구하기: LOG 함수

log_{b}{(a)} = c  ↔   b^(c) = a

LOG 함수 기본 형식
LOG(float_expression, [,base])

float_expression:  계산할 표현식

 [,base]: 밑을 설정하는 값

 

SELECT LOG(2)

0.693147180559945

 

SELECT LOG(10, 5)

1.43067655807339

자연로그 10을 계산하는 데 밑의 값을 5로 설정

 

e의 n 제곱값 구하기: EXP 함수

EXP 함수 기본 형식
EXP(float_expression)

SELECT EXP(10)

22026.4657948067

 

확인

SELECT EXP(LOG(20)), LOG(EXP(20))

(열 이름 없음) (열 이름 없음)
20                     20

 

제곱하기: POWER, SQUARE 함수

POWER, SQUARE 함수 기본 형식
POWER(float_expression, y)
SQUARE(float_expression)

SELECT POWER(2, 3), POWER(2, 10), POWER(2.0, 3) 

(열 이름 없음) (열 이름 없음) (열 이름 없음)
8                        1024                8.0

정수 입력하면 정수로, 실수 입력하면 실수로 반환

SELECT SQUARE(3.3), SQUARE(10)

(열 이름 없음) (열 이름 없음)
10.89                100

 

제곱근 구하기:. SQRT 함수

SQRT 함수 기본 형식
SQRT(float_expression)

SELECT SQRT(1.00), SQRT(10.00)

(열 이름 없음) (열 이름 없음)
1                        3.16227766016838

 

난수 구하기:RAND 함수

RAND 함수 기본 형식
RAND([seed])

[seed]에 전달하는 값의 자료형은 tinyint, smallint, int형이다. 만약 [seed]를 지정하지 않으면 데이터베이스 엔진이 임의로 초깃값을 설정한다. [seed]는 일종의 난수 종류를 결정하는 값이며, 같은 [seed] 값을 설정하면 RAND 함수는 같은 결과를 반환한다. 

SELECT RAND(100), RAND(), RNAD()

(열 이름 없음)                    (열 이름 없음)                       (열 이름 없음)
0.715436657367485       0.28463380767982            0.0131039082850364

SELECT RAND(100), RAND(), RNAD()

(열 이름 없음)                    (열 이름 없음)                       (열 이름 없음)
0.715436657367485       0.28463380767982            0.0131039082850364

 

계속 같은 값을 반환하는 이유는 쿼리 편집기 창에서 처음 함수를 실행할 때 임의의 초깃값을 계속 재사용하기 때문이다. 

다음은  [seed]를 설정하지 않은 채로, WHILE 문을 사용해 난수를 4회 생성한 쿼리이다.

DECLARE @counter SMALLINT;

SET @counter = 1;

WHILE @counter < 5

  BEGIN

       SELECT RAND() Random_Number

       SET @counter = @counter + 1

  END;

GO

결과

Random_Number
0.28769876521071

Random_Number
0.100505471175005

Random_Number
0.292787286982702

Random_Number
0.868829058415689

 

삼각함수: COS, SIN, TAN, ATAN 함수

COS 함수 기본 형식
COS(float_expression)

SELECT COS(14.78)

-0.599465426194654

SELECT SIN(45.175643)

0.929607286611012

SELECT TAN(PI()/2), TAN(45)

(열 이름 없음)                        (열 이름 없음)
1.63312393531954E+16    1.61977519054386

SELECT ATAN(45.87) AS atanCalc1, ATAN(-181.01) AS atanCalc2, ATAN(0) AS atanCalc3, ATAN(0.1472738) AS atanCalc4, ATAN(197.1099392) AS atanCalc5

atanCalc1                              atanCalc2                      atanCalc3      atanCalc4                       atanCalc5
1.54899903834808           -1.56527182634403        0                   0.146222676937652    1.5657230594361