:tocdepth: 3
**************
수치 연산 함수
**************
.. contents::
ABS
===
.. function:: ABS (number_expr)
함수는 지정된 인자 값의 절대값을 반환하며, 리턴 값의 타입은 주어진 인자의 타입과 같다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param number_expr: 수치 값을 반환하는 임의의 연산식이다.
:rtype: number_expr의 타입
.. code-block:: sql
--it returns the absolute value of the argument
SELECT ABS(12.3), ABS(-12.3), ABS(-12.3000), ABS(0.0);
::
abs(12.3) abs(-12.3) abs(-12.3000) abs(0.0)
================================================================================
12.3 12.3 12.3000 .0
ACOS
====
.. function:: ACOS ( x )
**ACOS** 함수는 인자의 아크 코사인(arc cosine) 값을 반환한다. 즉, 코사인이 *x* 인 값을 라디안 단위로 반환하며, 리턴 값은 **DOUBLE** 타입이다. *x* 는 -1 이상 1 이하의 값이어야 하며, 그 외의 경우 에러를 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT ACOS(1), ACOS(0), ACOS(-1);
::
acos(1) acos(0) acos(-1)
==================================================================================
0.000000000000000e+00 1.570796326794897e+00 3.141592653589793e+00
ASIN
====
.. function:: ASIN ( x )
**ASIN** 함수는 인자의 아크 사인(arc sine) 값을 반환한다. 즉, 사인이 *x* 인 값을 라디안 단위로 반환하며, 리턴 값은 DOUBLE 타입이다. *x* 는 -1 이상 1 이하의 값이어야 하며, 그 외의 경우 에러를 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT ASIN(1), ASIN(0), ASIN(-1);
::
asin(1) asin(0) asin(-1)
==============================================================================
1.570796326794897e+00 0.000000000000000e+00 -1.570796326794897e+00
ATAN
====
.. function:: ATAN ( [y,] x )
**ATAN** 함수는 탄젠트가 *x* 인 값을 라디안 단위로 반환한다. 인자 *y* 는 생략될 수 있으며, *y* 가 지정되는 경우 함수는 *y* / *x* 의 아크 탄젠트 값을 계산한다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x,y: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT ATAN(1), ATAN(-1), ATAN(1,-1);
::
atan(1) atan(-1) atan2(1, -1)
==============================================================================
7.853981633974483e-01 -7.853981633974483e-01 2.356194490192345e+000
ATAN2
=====
.. function:: ATAN2 ( y, x )
**ATAN2** 함수는 *y* / *x* 의 아크 탄젠트 값을 라디안 단위로 반환하며, :func:`ATAN` 와 유사하게 동작한다. 인자 *x*, *y* 가 모두 지정되어야 한다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x,y: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT ATAN2(1,1), ATAN2(-1,-1), ATAN2(Pi(),0);
::
atan2(1, 1) atan2(-1, -1) atan2( pi(), 0)
==============================================================================
7.853981633974483e-01 -2.356194490192345e+00 1.570796326794897e+00
CEIL
====
.. function:: CEIL( number_operand )
**CEIL** 함수는 인자보다 크거나 같은 최소 정수 값을 인자의 타입으로 반환한다. 리턴 값은 *number_operand* 인자로 지정된 값의 유효 자릿수를 따른다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param number_operand: 수치 값을 반환하는 임의의 연산식이다.
:rtype: INT
.. code-block:: sql
SELECT CEIL(34567.34567), CEIL(-34567.34567);
::
ceil(34567.34567) ceil(-34567.34567)
============================================
34568.00000 -34567.00000
SELECT CEIL(34567.1), CEIL(-34567.1);
::
ceil(34567.1) ceil(-34567.1)
=============================
34568.0 -34567.0
CONV
====
.. function:: CONV (number,from_base,to_base)
**CONV** 함수는 숫자의 진수를 변환하는 함수이며, 진수가 변환된 숫자를 문자열로 반환한다. 진수의 최소값은 2, 최대값은 36이다. 반환할 숫자의 진수를 나타내는 *to_base* 가 음수이면 입력 숫자인 *number* 가 부호 있는(signed) 숫자로 간주되고, 그 외의 경우에는 부호 없는(unsigned) 숫자로 간주된다. *from_base* 또는 *to_base*\ 에 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param number: 입력 숫자
:param from_base: 입력 숫자의 진수
:param to_base: 반환할 숫자의 진수
:rtype: STRING
.. code-block:: sql
SELECT CONV('f',16,2);
::
'1111'
.. code-block:: sql
SELECT CONV('6H',20,8);
::
'211'
.. code-block:: sql
SELECT CONV(-30,10,-20);
::
'-1A'
COS
===
.. function:: COS ( x )
**COS** 함수는 인자의 코사인(cosine) 값을 반환하며, 인자 *x* 는 라디안 값이어야 한다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT COS(pi()/6), COS(pi()/3), COS(pi());
::
cos( pi()/6) cos( pi()/3) cos( pi())
==============================================================================
8.660254037844387e-01 5.000000000000001e-01 -1.000000000000000e+00
COT
===
.. function:: COT ( x )
**COT** 함수는 인자 *x* 의 코탄젠트(cotangent) 값을 반환한다. 즉, 탄젠트가 *x* 인 값을 라디안 단위로 반환하며, 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT COT(1), COT(-1), COT(0);
::
cot(1) cot(-1) cot(0)
==========================================================================
6.420926159343306e-01 -6.420926159343306e-01 NULL
CRC32
=====
.. function:: CRC32 ( string )
**CRC32** 함수는 32비트 정수로 순환 중복 검사 값을 반환한다. NULL을 입력하면 NULL을 반환한다.
:param string: 문자열 값을 반환하는 표현식
:rtype: INTEGER
.. code-block:: sql
SELECT CRC32('cubrid');
::
crc32('cubrid')
==================
908740081
DEGREES
=======
.. function:: DEGREES ( x )
**DEGREES** 함수는 라디안 단위로 지정된 인자 *x* 를 각도로 환산하여 반환한다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT DEGREES(pi()/6), DEGREES(pi()/3), DEGREES (pi());
::
degrees( pi()/6) degrees( pi()/3) degrees( pi())
==============================================================================
3.000000000000000e+01 5.999999999999999e+01 1.800000000000000e+02
DRANDOM, DRAND
==============
.. function:: DRANDOM ( [seed] )
.. function:: DRAND ( [seed] )
**DRANDOM** / **DRAND** 함수는 구간 0.0 이상 1.0 미만의 구간에서 임의의 이중 정밀도(double-precision) 부동 소수점 값을 반환하며, *seed* 인자를 지정할 수 있다. *seed* 인자의 타입은 **INTEGER** 이며, 실수가 지정되면 반올림하고, **INTEGER** 범위를 초과하면 에러를 반환한다.
*seed* 값이 주어지지 않은 경우 **DRAND()**\는 연산을 출력하는 행(row)의 개수와 관계없이 한 문장 내에서 1회만 연산을 수행하여 오직 한 개의 임의값만 생성하는 반면, **DRANDOM()**\는 함수가 호출될 때마다 매번 연산을 수행하므로 한 문장 내에서 여러 개의 다른 임의 값을 생성한다. 따라서, 무작위 순서로 행을 출력하기 위해서는 **ORDER BY** 절에 **DRANDOM()**\을 이용해야 한다. 무작위 정수값을 구하기 위해서는 :func:`RANDOM`\ 를 사용한다.
:param seed: seed 값
:rtype: DOUBLE
.. code-block:: sql
SELECT DRAND(), DRAND(1), DRAND(1.4);
::
drand() drand(1) drand(1.4)
==============================================================================
2.849646518006921e-001 4.163034446537495e-002 4.163034446537495e-002
.. code-block:: sql
CREATE TABLE rand_tbl (
id INT,
name VARCHAR(255)
);
INSERT INTO rand_tbl VALUES
(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'),
(6, 'f'), (7, 'g'), (8, 'h'), (9, 'i'), (10, 'j');
SELECT * FROM rand_tbl;
::
id name
===================================
1 'a'
2 'b'
3 'c'
4 'd'
5 'e'
6 'f'
7 'g'
8 'h'
9 'i'
10 'j'
.. code-block:: sql
--drandom() returns random values on every row
SELECT DRAND(), DRANDOM() FROM rand_tbl;
::
drand() drandom()
==============================================================================
7.638782921842098e-001 1.018707846308786e-001
7.638782921842098e-001 3.191320535905026e-001
7.638782921842098e-001 3.461714529862361e-001
7.638782921842098e-001 6.791894283883175e-001
7.638782921842098e-001 4.533829767754143e-001
7.638782921842098e-001 1.714224677266762e-001
7.638782921842098e-001 1.698049867244484e-001
7.638782921842098e-001 4.507583849604786e-002
7.638782921842098e-001 5.279091769157994e-001
7.638782921842098e-001 7.021088290047914e-001
.. code-block:: sql
--selecting rows in random order
SELECT * FROM rand_tbl ORDER BY DRANDOM();
::
id name
===================================
6 'f'
2 'b'
7 'g'
8 'h'
1 'a'
4 'd'
10 'j'
9 'i'
5 'e'
3 'c'
EXP
===
.. function:: EXP( x )
**EXP** 함수는 자연로그의 밑수인 e를 *x* 제곱한 값을 **DOUBLE** 타입으로 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT EXP(1), EXP(0);
::
exp(1) exp(0)
====================================================
2.718281828459045e+000 1.000000000000000e+000
.. code-block:: sql
SELECT EXP(-1), EXP(2.00);
::
exp(-1) exp(2.00)
====================================================
3.678794411714423e-001 7.389056098930650e+000
FLOOR
=====
.. function:: FLOOR( number_operand )
**FLOOR** 함수는 인자보다 작거나 같은 최대 정수 값을 반환하며, 리턴 값의 타입은 인자의 타입과 같다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param number_operand: 수치 값을 반환하는 임의의 연산식이다.
:rtype: number_operand의 타입
.. code-block:: sql
--it returns the largest integer less than or equal to the arguments
SELECT FLOOR(34567.34567), FLOOR(-34567.34567);
::
floor(34567.34567) floor(-34567.34567)
============================================
34567.00000 -34568.00000
.. code-block:: sql
SELECT FLOOR(34567), FLOOR(-34567);
::
floor(34567) floor(-34567)
=============================
34567 -34567
HEX
===
.. function:: HEX(n)
**HEX** 함수는 문자열을 인자로 지정하면 해당 문자열에 대한 16진수 문자열을 반환하고, 숫자를 인자로 지정하면 해당 숫자에 대한 16진수 문자열을 반환한다. 숫자를 인자로 지정하면 CONV(num, 10, 16)과 같은 값을 반환한다.
:param n: 문자열 또는 숫자
:rtype: STRING
.. code-block:: sql
SELECT HEX('ab'), HEX(128), CONV(HEX(128), 16, 10);
::
hex('ab') hex(128) conv(hex(128), 16, 10)
==================================================================
'6162' '80' '128'
LN
==
.. function:: LN ( x )
**LN** 함수는 진수 *x* 의 자연 로그(밑수가 e인 로그) 값을 반환하며, 리턴 값은 **DOUBLE** 타입이다. 진수 *x* 가 0이거나 음수인 경우, 에러를 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 양수 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT ln(1), ln(2.72);
::
ln(1) ln(2.72)
=====================================================
0.000000000000000e+00 1.000631880307906e+00
LOG2
====
.. function:: LOG2 ( x )
**LOG2** 함수는 진수가 *x* 이고, 밑수가 2인 로그 값을 반환하며, 리턴 값은 **DOUBLE** 타입이다. 진수 *x* 가 0이거나 음수인 경우, 에러를 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 양수 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT log2(1), log2(8);
::
log2(1) log2(8)
======================================================
0.000000000000000e+00 3.000000000000000e+00
LOG10
=====
.. function:: LOG10 ( x )
**LOG10** 함수는 진수 *x* 의 상용 로그 값을 반환하며, 리턴 값은 **DOUBLE** 타입이다. 진수 *x* 가 0이거나 음수인 경우, 에러를 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 양수 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT log10(1), log10(1000);
::
log10(1) log10(1000)
====================================================
0.000000000000000e+00 3.000000000000000e+00
MOD
===
.. function:: MOD (m, n)
**MOD** 함수는 첫 번째 인자 *m*\을 두 번째 인자 *n*\으로 나눈 나머지 값을 반환하며, 만약 *n*\이 0이거나 *m*\보다 큰 경우 , 나누기 연산을 수행하지 않고 *m* 값을 그대로 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
주의할 점은 피제수, 즉 **MOD** 함수의 인자 *m*\이 음수인 경우, 전형적인 연산(classical modulus) 방식과 다르게 동작한다는 점이다. 아래의 표를 참고한다.
**MOD 함수의 결과**
+-------+-------+---------------+-----------------------+
| m | n | MOD(m, n) | Classical Modulus |
| | | | m-n*FLOOR(m/n) |
+=======+=======+===============+=======================+
| 11 | 4 | 3 | 3 |
+-------+-------+---------------+-----------------------+
| 11 | -4 | 3 | -1 |
+-------+-------+---------------+-----------------------+
| -11 | 4 | -3 | 1 |
+-------+-------+---------------+-----------------------+
| -11 | -4 | -3 | -3 |
+-------+-------+---------------+-----------------------+
| 11 | 0 | 11 | 0으로 나누기 에러 |
+-------+-------+---------------+-----------------------+
:param m: 피제수를 나타내며, 수치 값을 반환하는 연산식이다.
:param n: 제수를 나타내며, 수치 값을 반환하는 연산식이다.
:rtype: m/n 연산 결과의 타입
.. code-block:: sql
--it returns the reminder of m divided by n
SELECT MOD(11, 4), MOD(11, -4), MOD(-11, 4), MOD(-11, -4), MOD(11,0);
::
mod(11, 4) mod(11, -4) mod(-11, 4) mod(-11, -4) mod(11, 0)
=====================================================================
3 3 -3 -3 11
.. code-block:: sql
SELECT MOD(11.0, 4), MOD(11.000, 4), MOD(11, 4.0), MOD(11, 4.000);
::
mod(11.0, 4) mod(11.000, 4) mod(11, 4.0) mod(11, 4.000)
=========================================================================
3.0 3.000 3.0 3.000
PI
==
.. function:: PI ()
**PI** 함수는 π 값을 반환하며, 리턴 값은 DOUBLE 타입이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT PI(), PI()/2;
::
pi() pi()/2
====================================================
3.141592653589793e+00 1.570796326794897e+00
POW, POWER
==========
.. function:: POW( x, y )
.. function:: POWER( x, y )
**POW** 함수와 **POWER** 함수는 동일하며, 지정된 밑수 *x* 를 지수 *y* 만큼 거듭제곱한 값을 반환한다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 밑수를 나타내며, 수치 값을 반환하는 연산식이다.
:param y: 지수를 나타내며, 수치 값을 반환하는 연산식이다. 밑수가 음수인 경우, 지수는 반드시 정수가 지정되어야 한다.
:rtype: DOUBLE
.. code-block:: sql
SELECT POWER(2, 5), POWER(-2, 5), POWER(0, 0), POWER(1,0);
::
power(2, 5) power(-2, 5) power(0, 0) power(1, 0)
====================================================================================================
3.200000000000000e+01 -3.200000000000000e+01 1.000000000000000e+00 1.000000000000000e+00
.. code-block:: sql
--it returns an error when the negative base is powered by a non-int exponent
SELECT POWER(-2, -5.1), POWER(-2, -5.1);
::
ERROR: Argument of power() is out of range.
RADIANS
=======
.. function:: RADIANS ( x )
**RADIANS** 함수는 각도 단위로 지정된 인자 *x* 를 라디안 단위로 환산하여 리턴한다. 리턴 값은 **DOUBLE** 타입이다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT RADIANS(90), RADIANS(180), RADIANS(360);
::
radians(90) radians(180) radians(360)
==============================================================================
1.570796326794897e+00 3.141592653589793e+00 6.283185307179586e+00
RANDOM, RAND
============
.. function:: RANDOM ( [seed] )
.. function:: RAND ( [seed] )
**RANDOM** / **RAND** 함수는 0 이상 2 31 미만 구간에서 임의의 정수 값을 반환하며, *seed* 인자를 지정할 수 있다. *seed* 인자의 타입은 **INTEGER** 이며, 실수가 지정되면 반올림하고 **INTEGER** 범위를 초과하면 에러를 반환한다.
*seed* 값이 주어지지 않은 경우 **RAND()**\는 연산을 출력하는 행(row)의 개수와 관계없이 한 문장 내에서 1회만 연산을 수행하여 오직 한 개의 임의값만 생성하는 반면, **RANDOM()**\은 함수가 호출될 때마다 매번 연산을 수행하므로 한 문장 내에서 여러 개의 다른 임의 값을 생성한다. 따라서, 무작위 순서로 행을 출력하기 위해서는 **RANDOM()**\을 이용해야 한다.
무작위 실수 값을 구하기 위해서는 :func:`DRANDOM` 를 사용한다.
:param seed:
:rtype: INT
.. code-block:: sql
SELECT RAND(), RAND(1), RAND(1.4);
::
rand() rand(1) rand(1.4)
=======================================
1526981144 89400484 89400484
.. code-block:: sql
--creating a new table
SELECT * FROM rand_tbl;
::
id name
===================================
1 'a'
2 'b'
3 'c'
4 'd'
5 'e'
6 'f'
7 'g'
8 'h'
9 'i'
10 'j'
.. code-block:: sql
--random() returns random values on every row
SELECT RAND(),RANDOM() FROM rand_tbl;
::
rand() random()
============================
2078876566 1753698891
2078876566 1508854032
2078876566 625052132
2078876566 279624236
2078876566 1449981446
2078876566 1360529082
2078876566 1563510619
2078876566 1598680194
2078876566 1160177096
2078876566 2075234419
.. code-block:: sql
--selecting rows in random order
SELECT * FROM rand_tbl ORDER BY RANDOM();
::
id name
===================================
6 'f'
1 'a'
5 'e'
4 'd'
2 'b'
7 'g'
10 'j'
9 'i'
3 'c'
8 'h'
ROUND
=====
.. function:: ROUND( number_operand, integer )
**ROUND** 함수는 지정된 인자 *number_operand* 를 소수점 아래 *integer* 자리까지 반올림한 값을 반환한다. 반올림할 자릿수를 지정하는 *integer* 인자가 생략되거나 0인 경우에는 소수점 아래 첫째 자리에서 반올림한다. 그리고 *integer* 인자가 음수이면, 소수점 위 자리, 즉 정수부에서 반올림한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param number_operand: 수치 값을 반환하는 임의의 연산식이다.
:param integer: 반올림 처리할 위치를 지정한다. 양의 정수 *n* 이 지정되면 소수점 아래 *n* 자리까지 표현되고, 음의 정수 *n* 이 지정되면 소수점 위 *n* 자리에서 반올림한다.
:rtype: number_operand의 타입
.. code-block:: sql
--it rounds a number to one decimal point when the second argument is omitted
SELECT ROUND(34567.34567), ROUND(-34567.34567);
::
round(34567.34567, 0) round(-34567.34567, 0)
============================================
34567.00000 -34567.00000
.. code-block:: sql
--it rounds a number to three decimal point
SELECT ROUND(34567.34567, 3), ROUND(-34567.34567, 3) FROM db_root;
::
round(34567.34567, 3) round(-34567.34567, 3)
============================================
34567.34600 -34567.34600
.. code-block:: sql
--it rounds a number three digit to the left of the decimal point
SELECT ROUND(34567.34567, -3), ROUND(-34567.34567, -3);
::
round(34567.34567, -3) round(-34567.34567, -3)
============================================
35000.00000 -35000.00000
SIGN
====
.. function:: SIGN (number_operand)
**SIGN** 함수는 지정된 인자 값의 부호를 반환한다. 양수이면 1을, 음수이면 -1을, 0이면 0을 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param number_operand: 수치 값을 반환하는 임의의 연산식이다.
:rtype: INT
.. code-block:: sql
--it returns the sign of the argument
SELECT SIGN(12.3), SIGN(-12.3), SIGN(0);
::
sign(12.3) sign(-12.3) sign(0)
========================================
1 -1 0
SIN
===
.. function:: SIN ( x )
**SIN** 함수는 인자의 사인(sine) 값을 반환하며, 인자 *x* 는 라디안 값이어야 한다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT SIN(pi()/6), SIN(pi()/3), SIN(pi());
::
sin( pi()/6) sin( pi()/3) sin( pi())
==============================================================================
4.999999999999999e-01 8.660254037844386e-01 1.224646799147353e-16
SQRT
====
.. function:: SQRT ( x )
**SQRT** 함수는 *x* 의 제곱근(square root) 값을 **DOUBLE** 타입으로 반환한다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다. 만약, 음수이면 에러를 반환한다.
:rtype: DOUBLE
.. code-block:: sql
SELECT SQRT(4), SQRT(16.0);
::
sqrt(4) sqrt(16.0)
====================================================
2.000000000000000e+00 4.000000000000000e+00
TAN
===
.. function:: TAN ( x )
**TAN** 함수는 인자의 탄젠트(tangent) 값을 반환하며, 인자 *x* 는 라디안 값이어야 한다. 리턴 값은 **DOUBLE** 타입이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:rtype: DOUBLE
.. code-block:: sql
SELECT TAN(pi()/6), TAN(pi()/3), TAN(pi()/4);
::
tan( pi()/6) tan( pi()/3) tan( pi()/4)
==============================================================================
5.773502691896257e-01 1.732050807568877e+00 9.999999999999999e-01
TRUNC, TRUNCATE
===============
.. function:: TRUNC ( x[, dec] )
.. function:: TRUNCATE ( x, dec )
**TRUNC** 함수와 **TRUNCATE** 함수는 지정된 인자 *x* 의 소수점 아래 숫자가 *dec* 자리까지 표현되도록 버림(truncation)한 값을 반환한다. 단, **TRUNC** 함수의 *dec* 인자는 생략할 수 있지만, **TRUNCATE** 함수의 *dec* 인자는 생략할 수 없다. 버림할 위치를 지정하는 *dec* 인자가 음수이면 정수부의 소수점 위 *dec* 번째 자리까지 0으로 표시한다. 리턴 값의 표현 자릿수는 인자 *x* 를 따른다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
:param x: 수치 값을 반환하는 임의의 연산식이다.
:param dec: 버림할 위치를 지정한다. 양의 정수 *n* 이 지정되면 소수점 아래 *n* 자리까지 표현되고, 음의 정수 *n* 이 지정되면 소수점 위 *n* 자리까지 0으로 표시한다. *dec* 인자가 0이거나 생략되면 소수부를 버림한다. 단, **TRUNCATE** 함수에서는 *dec* 인자를 생략할 수 없다.
:rtype: x의 타입
.. code-block:: sql
--it returns a number truncated to 0 places
SELECT TRUNC(34567.34567), TRUNCATE(34567.34567, 0);
::
trunc(34567.34567, 0) trunc(34567.34567, 0)
============================================
34567.00000 34567.00000
.. code-block:: sql
--it returns a number truncated to three decimal places
SELECT TRUNC(34567.34567, 3), TRUNC(-34567.34567, 3);
::
trunc(34567.34567, 3) trunc(-34567.34567, 3)
============================================
34567.34500 -34567.34500
.. code-block:: sql
--it returns a number truncated to three digits left of the decimal point
SELECT TRUNC(34567.34567, -3), TRUNC(-34567.34567, -3);
::
trunc(34567.34567, -3) trunc(-34567.34567, -3)
============================================
34000.00000 -34000.00000
WIDTH_BUCKET
============
.. function:: WIDTH_BUCKET(expression, from, to, num_buckets)
**WIDTH_BUCKET** 함수는 순차적인 데이터 집합을 균등한 범위로 부여된 일련의 버킷으로 나누며, 각 행에 적당한 버킷 번호를 1부터 할당한다. 즉, WIDTH_BUCKET 함수는 equi-width histogram을 생성한다. 반환되는 값은 정수이다. 숫자로 변환되지 않는 문자열을 입력할 때 **cubrid.conf**\ 의 **return_null_on_function_errors** 파라미터의 값이 no(기본값)면 에러, yes면 NULL을 반환한다.
이 함수는 주어진 버킷 개수로 범위를 균등하게 나누어 버킷 번호를 부여한다. 즉, 버킷마다 각 범위의 넓이는 균등하다.
참고로 :func:`NTILE` 분석 함수는 이에 비해 주어진 버킷 개수로 전체 행의 개수를 균등하게 나누어 버킷 번호를 부여한다. 즉, 버킷마다 각 행의 개수는 균등하다.
:param expression: 버킷 번호를 부여받기 위한 입력 값. 수치 값을 반환하는 임의의 연산식을 지정한다.
:param from: *expression*\ 이 취할 수 있는 범위의 시작값으로, 이 값은 전체 범위 안에 포함된다.
:param to: *expression*\ 이 취할 수 있는 범위의 마지막 값으로, 이 값은 전체 범위 안에 포함되지 않는다.
:param num_buckets: 버킷의 개수. 추가로 범위 밖의 내용을 담기 위한 0번 버킷과 (*num_buckets* + 1)번 버킷이 생성된다.
:rtype: INT
*expression*\ 은 버킷 번호를 부여받기 위한 입력 데이터이다. *from*\ 과 *to* 값으로 숫자형 타입과 날짜/시간 타입의 값 또는 날짜/시간 타입으로 변환 가능한 문자열이 입력될 수 있다. 전체 범위에서 *from*\ 은 범위에 포함되지만 *to*\ 는 범위 밖에 존재한다.
예를 들어 WIDTH_BUCKET (score, 80, 50, 3)이 반환하는 값은 score가
* 80보다 크면 0,
* [80, 70)이면 1,
* [70, 60)이면 2,
* [60, 50)이면 3,
* 50보다 작거나 같으면 4가 된다.
다음 예제는 80점보다 작거나 같고 50점보다 큰 범위를 1부터 3까지 균등한 점수 범위로 나누어 등급을 부여한다. 해당 범위를 벗어나는 경우 80점보다 크면 0, 50점이거나 50점보다 작으면 4등급을 부여한다.
.. code-block:: sql
CREATE TABLE t_score (name VARCHAR(10), score INT);
INSERT INTO t_score VALUES
('Amie', 60),
('Jane', 80),
('Lora', 60),
('James', 75),
('Peter', 70),
('Tom', 50),
('Ralph', 99),
('David', 55);
SELECT name, score, WIDTH_BUCKET (score, 80, 50, 3) grade
FROM t_score
ORDER BY grade ASC, score DESC;
::
name score grade
================================================
'Ralph' 99 0
'Jane' 80 1
'James' 75 1
'Peter' 70 2
'Amie' 60 3
'Lora' 60 3
'David' 55 3
'Tom' 50 4
다음의 예에서 **WIDTH_BUCKET** 함수는 birthdate의 지정 범위를 균등하게 나누고 이를 기준으로 버킷 번호를 부여한다. 8 명의 고객을 생년월일을 기준으로 '1950-01-01'부터 '1999-12-31'까지의 범위를 5개로 균등 분할하며, birthdate 값이 범위를 벗어나면 0 또는 버킷 개수 + 1인 6을 반환한다.
.. code-block:: sql
CREATE TABLE t_customer (name VARCHAR(10), birthdate DATE);
INSERT INTO t_customer VALUES
('Amie', date'1978-03-18'),
('Jane', date'1983-05-12'),
('Lora', date'1987-03-26'),
('James', date'1948-12-28'),
('Peter', date'1988-10-25'),
('Tom', date'1980-07-28'),
('Ralph', date'1995-03-17'),
('David', date'1986-07-28');
SELECT name, birthdate, WIDTH_BUCKET (birthdate, date'1950-01-01', date'2000-1-1', 5) age_group
FROM t_customer
ORDER BY birthdate;
::
name birthdate age_group
===============================================
'James' 12/28/1948 0
'Amie' 03/18/1978 4
'Tom' 07/28/1980 4
'Jane' 05/12/1983 5
'David' 07/28/1986 5
'Lora' 03/26/1987 5
'Peter' 10/25/1988 5
'Ralph' 03/17/1995 6
Day widened into its first perfection as we moved down the highroad toward a near fork whose right was to lead Harry and his solemn cortge southward, while the left should be our eastward course. Camille and I rode horseback, side by side, with no one near enough to smile at my sentimental laudations of the morning's splendors, or at her for repaying my eloquence with looks so full of tender worship, personal acceptance and self-bestowal, that to tell of them here would make as poor a show as to lift a sea-flower out of the sea; they call for piccolo notes and I am no musician. The little man elected to have a cab. When Bow Street was reached Prout had the satisfaction of finding that all his birds had been netted. He received the warm congratulations of his inspector modestly. Caloric or air engines. I did not feel very comfortable after what had happened to those soldiers who lost their lives so cruelly sudden, or in any case had been seriously wounded, while the officers took little notice of them. But it was desirable to behave as discreetly as possible, and so to get a permit to Maastricht. "Louvain, It will check up, that way, too, smiled Larry. "Me run away," thought Shorty, as they walked along. "Hosses couldn't drag me away. I only hope that house is 10 miles off." Reuben began to take off his coatyoung Realf drew back almost in disgust. "Well, would Robert have stolen money, or Albert disgraced your name, to get free, if you and your farm hadn't made them slaves? If you hadn't been a heartless slave-driver would George have died the other night alone on the Moor?or would Richard have taken advantage of a neighbour's charity to escape from you? Don't you see that your ambition has driven you to make slaves of your children?" "D?an't tell me," said Coalbran in the bar, "as it wurn't his fault. Foot-and-mouth can't just drop from heaven. He must have bought some furriners, and they've carried it wud 'em, surelye." But meantime a strange restlessness consumed her, tinctured by a horrible boldness. There were moments when she no longer was afraid of Handshut, when she felt herself impelled to seek him out, and make the most of the short time they had together. There could be no danger, for he was going so soon ... so few more words, so few more glances.... Thus her mind worked. "What mean you, woman?" quickly returned De Boteler; "do you accuse the keeper of my chase as having plotted against your son, or whom do you suspect?" Her face was shrivelled and yellow, and the dark full eyes that now, as it were, stood forth from the sunken cheeks, looked with a strange brightness on the scene, and seemed well adapted to stamp the character of witch on so withered a form. And perhaps there were few of those entirely uninterested in the matter who now gazed upon her, who would not have sworn that she merited the stake. "Thou art set over the people, and to the Lord's anointed I come to seek for justice." HoMEŷһëƬѸպ
ENTER NUMBET 0018www.fzzcw.com.cn
www.liujitang.com.cn
chnmarvel.com.cn
www.027026.com.cn
www.i-moto.com.cn
www.adacore.com.cn
odmei.com.cn
cqlkjg.com.cn
www.ncbus.com.cn
www.zzsfb.com.cn