수치 함수#

산술·로그·삼각 함수들입니다. 대부분 속성을 곧바로 받는 jsonb 오버로드와 PostgreSQL에서 온 double precision 오버로드를 갖고 있습니다. 어느 쪽이든 Cypher의 RETURN은 결과를 jsonb 숫자로 출력합니다.

이름이 d로 끝나지 않으면 각도는 라디안입니다.

예제는 예제 데이터셋에서 실행됩니다.

abs#

abs ( x jsonb ) -> jsonb
abs ( x numeric ) -> numeric

숫자의 절댓값을 반환합니다.

MATCH (m:movie {title:'Inception'}) RETURN abs(m.year - 2000) AS gap;
 gap
-----
 10

acos#

acos ( x jsonb ) -> jsonb
acos ( x double precision ) -> double precision

x의 아크코사인을 라디안으로 반환합니다. x는 −1과 1 사이여야 합니다.

asin#

asin ( x jsonb ) -> jsonb
asin ( x double precision ) -> double precision

x의 아크사인을 라디안으로 반환합니다. x는 −1과 1 사이여야 합니다.

atan#

atan ( x jsonb ) -> jsonb
atan ( x double precision ) -> double precision

x의 아크탄젠트를 라디안으로 반환합니다.

atan2#

atan2 ( y jsonb, x jsonb ) -> jsonb
atan2 ( y double precision, x double precision ) -> double precision

y / x의 아크탄젠트를 라디안으로 반환하며, 두 인자의 부호를 써서 결과를 올바른 사분면에 놓습니다.

고려할 점

  • atan(y / x)보다 이것을 쓰십시오. 그것은 −15/3과 15/−3을 구별할 수 없어 사분면을 잃습니다.

RETURN cot(1.5) AS cot, asin(1) AS asin, acos(0.5) AS acos, atan(-1) AS atan, atan2(-1.5, 1.3) AS atan2;
         cot         |        asin        |        acos        |        atan         |        atan2
---------------------+--------------------+--------------------+---------------------+---------------------
 0.07091484430265245 | 1.5707963267948966 | 1.0471975511965979 | -0.7853981633974483 | -0.8567056281827387

ceil#

ceil ( x jsonb ) -> jsonb
ceil ( x numeric ) -> numeric

x보다 작지 않은 가장 작은 정수를 반환합니다.

RETURN ceil(3.1) AS up, floor(3.1) AS down, round(3.6) AS nearest, sign(-19.93) AS sign;
 up | down | nearest | sign
----+------+---------+------
 4  | 3    | 4       | -1

cos#

cos ( x jsonb ) -> jsonb
cos ( x double precision ) -> double precision

라디안으로 주어진 각의 코사인을 반환합니다.

cosd#

cosd ( x double precision ) -> double precision

도로 주어진 각의 코사인을 반환합니다.

고려할 점

  • 4분의 1 회전 지점에서 정확합니다. 각을 먼저 변환하는 쪽은 그렇지 않습니다. cosd(90)은 0이지만 cos(radians(90))은 0.00000000000000006123233995736766입니다.

  • 도 단위 형태에는 jsonb 오버로드가 없으므로 속성이 double precision으로 변환됩니다.

RETURN sind(30) AS sind, cosd(60) AS cosd, tand(45) AS tand;
 sind | cosd | tand
------+------+------
 0.5  | 0.5  | 1

cot#

cot ( x jsonb ) -> jsonb
cot ( x double precision ) -> double precision

라디안으로 주어진 각의 코탄젠트, 즉 탄젠트의 역수를 반환합니다. 실제 예제는 atan2를 참고하십시오.

degrees#

degrees ( x jsonb ) -> jsonb
degrees ( x double precision ) -> double precision

라디안을 도로 변환합니다.

RETURN degrees(pi()) AS half_turn, radians(180) AS in_radians;
 half_turn |    in_radians
-----------+-------------------
 180       | 3.141592653589793

e#

e ( ) -> numeric

오일러 수를 numeric으로 반환합니다.

고려할 점

  • 결과가 numeric이므로, double precision인 exp(1)보다 자릿수가 많습니다. 2.7182818284590452 대 2.718281828459045입니다.

RETURN e() AS e, exp(1) AS exp_one;
         e          |      exp_one
--------------------+-------------------
 2.7182818284590452 | 2.718281828459045

exp#

exp ( x jsonb ) -> jsonb
exp ( x numeric ) -> numeric

e의 x제곱을 반환합니다.

floor#

floor ( x jsonb ) -> jsonb
floor ( x numeric ) -> numeric

x보다 크지 않은 가장 큰 정수를 반환합니다. 실제 예제는 ceil을 참고하십시오.

ln#

ln ( x double precision ) -> double precision
ln ( x numeric ) -> numeric

x의 자연로그를 반환합니다. Cypher에서 log가 해석되는 함수가 이것이고, 이 이름으로 직접 호출할 수도 있습니다.

log#

log ( x jsonb ) -> jsonb

x의 자연로그를 반환합니다.

고려할 점

  • Cypher 쿼리에서는 파서가 log를 ln으로 다시 쓰므로, 결과 컬럼의 이름이 ln이 되고 인자 두 개 형태는 없습니다:

RETURN log(2, 8);
ERROR:  function ln(integer, integer) does not exist
LINE 1: RETURN log(2, 8);
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
  • 밑이 10인 PostgreSQL의 log와는 반대입니다. Cypher에서 밑 10을 쓰려면 log10을 쓰십시오.

RETURN log(27) AS natural, log10(27) AS base_ten;
      natural      |      base_ten
-------------------+--------------------
 3.295836866004329 | 1.4313637641589874

log10#

log10 ( x double precision ) -> double precision
log10 ( x numeric ) -> numeric

x의 밑 10 로그를 반환합니다. 다시 쓰이지 않으므로 이 이름은 적힌 그대로의 뜻입니다.

pi#

pi ( ) -> double precision

π를 반환합니다. 실제 예제는 degrees를 참고하십시오.

radians#

radians ( x jsonb ) -> jsonb
radians ( x double precision ) -> double precision

도를 라디안으로 변환합니다.

rand#

rand ( ) -> jsonb

0 이상 1 미만의 반열린 구간에 있는 수를 반환합니다.

고려할 점

  • rand()는 불변으로 표시돼 있어서 플래너가 그것을 하나의 상수로 접습니다. 쿼리의 모든 행과 준비된 문장의 모든 실행이 같은 수를 봅니다. 대신 PostgreSQL의 random()을 호출하십시오. 그것은 변동 함수이고 Cypher에서도 동작합니다.

FOR x IN [1,2,3] RETURN x, rand(), random();
 x |       rand        |       random
---+-------------------+---------------------
 1 | 0.533950385997692 | 0.33269661597409694
 2 | 0.533950385997692 | 0.10517878758331145
 3 | 0.533950385997692 | 0.3874591104544447

round#

round ( x jsonb ) -> jsonb
round ( x numeric [, scale integer ] ) -> numeric

x를 가장 가까운 정수로 반올림하며, 0.5는 0에서 먼 쪽으로 올립니다.

고려할 점

  • jsonb 형태는 정수로만 반올림합니다. 소수 자리를 남기려면 형 변환을 해서 numeric 형태를 쓰십시오. round(x::numeric, 2)입니다.

sign#

sign ( x jsonb ) -> jsonb
sign ( x numeric ) -> numeric

x의 부호에 따라 −1, 0, 1을 반환합니다. 실제 예제는 ceil을 참고하십시오.

sin#

sin ( x double precision ) -> double precision

라디안으로 주어진 각의 사인을 반환합니다.

고려할 점

  • 삼각 함수 중 사인만 자기 이름으로 된 jsonb 오버로드가 없습니다. jsonb 사인은 jsonb_sin으로 카탈로그에 등록돼 있습니다. 잃는 것은 없습니다. 속성이 double precision으로 변환되고 sin()이 PostgreSQL 함수로 해석됩니다. 다만 jsonb 인자에 대한 결과 타입이 이웃 함수들과 다릅니다.

RETURN sin(0.5) AS sin, cos(0) AS cos, tan(0) AS tan;
        sin        | cos | tan
-------------------+-----+-----
 0.479425538604203 | 1   | 0
MATCH (m:movie {title:'The Matrix'})
RETURN pg_typeof(cos(m.embedding[0])) AS cos_t, pg_typeof(sin(m.embedding[0])) AS sin_t,
       pg_typeof(tan(m.embedding[0])) AS tan_t;
  cos_t  |       sin_t        |  tan_t
---------+--------------------+---------
 "jsonb" | "double precision" | "jsonb"

sind#

sind ( x double precision ) -> double precision

도로 주어진 각의 사인을 반환합니다. 실제 예제는 cosd를 참고하십시오.

sqrt#

sqrt ( x jsonb ) -> jsonb
sqrt ( x numeric ) -> numeric

x의 제곱근을 반환합니다.

고려할 점

  • 음수 인자는 null이 아니라 오류입니다:

RETURN sqrt(-16);
ERROR:  cannot take square root of a negative number
MATCH (m:movie {title:'The Matrix'}) RETURN sqrt(m.year) AS root;
        root
--------------------
 44.710177812216314

tan#

tan ( x jsonb ) -> jsonb
tan ( x double precision ) -> double precision

라디안으로 주어진 각의 탄젠트를 반환합니다. 실제 예제는 sin을 참고하십시오.

tand#

tand ( x double precision ) -> double precision

도로 주어진 각의 탄젠트를 반환합니다. 실제 예제는 cosd를 참고하십시오.

속성에 대한 산술#

+, -, *, /, %, ^ 연산자는 속성에 대해 동작하지만, jsonb 피연산자에서는 SQL의 규칙이 아니라 jsonb 자신의 규칙을 따릅니다. 정수 둘은 정수로 나뉩니다.

RETURN 7 % 3 AS modulo, 2 ^ 10 AS power, 7 / 2 AS integer_division, 7.0 / 2 AS real_division;
 modulo | power | integer_division |   real_division
--------+-------+------------------+--------------------
 1      | 1024  | 3                | 3.5000000000000000

각각 jsonb에 대한, 백틱으로 이름 붙은 연산자로 구현돼 있습니다. jsonb에 대한 산술 연산자를 참고하십시오.

호환성#

openCypher#

여기서 log()는 밑이 e이고 PostgreSQL에서는 밑이 10입니다. openCypher도 자연로그를 log로 표기하므로, Cypher 쿼리는 이식 가능하고 SQL 쿼리는 그렇지 않습니다. openCypher의 e()와 rand()도 있습니다. rand()는 상수로 접힌다는 점에서 벗어나 있습니다. haversin()은 지원되지 않습니다.

관련 항목#