SQL 함수: 수학 함수
절댓값 구하기: 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