이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

IBSurgeon 라이브러리

Firebird 3.0 내장 함수(SDF, 즉 Server Defined Functions)

아래 내장 함수들(DECODE 제외)은 같은 이름으로 선언된

UDF가 없을 때만 사용됩니다.

UDF 또는 시스템 함수의 선택은 문장을 컴파일할 때 결정되며,

문장이 저장(트리거 / SP)되더라도 변경되지 않습니다.

작성자:

Adriano dos Santos Fernandes <[email protected]>

Oleg Loa <[email protected]>

Alexey Karyakin <[email protected]>

Claudio Valderrama C. <cvalde at usa.net>

---

ABS

---

기능:

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

형식:

ABS( <number> )

예제:

select abs(amount) from transactions;

----

ACOS

----

기능:

숫자의 아크 코사인을 반환합니다.

형식:

ACOS( <number> )

참고:

ACOS의 인수는 -1에서 1 범위여야 하며, 0에서 PI 범위의 값을

반환합니다.

예제:

select acos(x) from y;

---–

ACOSH

---–

기능:

숫자의 쌍곡선 아크 코사인을 반환합니다(라디안 단위).

형식:

ACOSH( <number> )

예제:

select acosh(x) from y;

---——-

ASCII_CHAR

---——-

기능:

지정된 코드에 해당하는 ASCII 문자를 반환합니다.

형식:

ASCII\_CHAR( <number> )

참고:

ASCII\_CHAR의 인수는 0에서 255 범위여야 하며, NONE 문자 집합을

가진 값을 반환합니다.

예제:

select ascii\_char(x) from y;

---——

ASCII_VAL

---——

기능:

지정된 문자열의 첫 번째 문자에 대한 ASCII 코드를 반환합니다.

형식:

ASCII\_VAL( <string> )

참고:

1) 문자열이 비어 있으면 0을 반환합니다.

2) 첫 번째 문자가 멀티바이트이면 오류를 발생시킵니다.

예제:

select ascii\_val(x) from y;

----

ASIN

----

기능:

숫자의 아크 사인을 반환합니다.

형식:

ASIN( <number> )

참고:

ASIN의 인수는 -1에서 1 범위여야 하며, -PI / 2에서 PI / 2 범위의

값을 반환합니다.

예제:

select asin(x) from y;

---–

ASINH

---–

기능:

숫자의 쌍곡선 아크 사인을 반환합니다(라디안 단위).

형식:

ASINH( <number> )

예제:

select asinh(x) from y;

----

ATAN

----

기능:

숫자의 아크 탄젠트를 반환합니다.

형식:

ATAN( <number> )

참고:

-PI / 2에서 PI / 2 범위의 값을 반환합니다.

예제:

select atan(x) from y;

---–

ATAN2

---–

기능:

첫 번째 숫자 / 두 번째 숫자의 아크 탄젠트를 반환합니다.

형식:

ATAN( <number>, <number> )

참고:

-PI에서 PI 범위의 값을 반환합니다.

예제:

select atan2(x, y) from z;

---–

ATANH

---–

기능:

숫자의 쌍곡선 아크 탄젠트를 반환합니다(라디안 단위).

형식:

ATANH( <number> )

예제:

select atanh(x) from y;

---—-

BIN_AND

---—-

기능:

모든 인수에 대해 수행된 이진 AND 연산의 결과를 반환합니다.

형식:

BIN\_AND( <number>, <number> \[, <number> ...\] )

예제:

select bin\_and(flags, 1) from x;

---—-

BIN_NOT

---—-

기능:

인수에 대해 수행된 비트 NOT 연산의 결과를 반환합니다.

형식:

BIN\_NOT( <number> )

예제:

select bin\_not(flags) from x;

---—

BIN_OR

---—

기능:

모든 인수에 대해 수행된 이진 OR 연산의 결과를 반환합니다.

형식:

BIN\_OR( <number>, <number> \[, <number> ...\] )

예제:

select bin\_or(flags1, flags2) from x;

---—-

BIN_SHL

---—-

기능:

인수에 대해 수행된 이진 왼쪽 시프트 연산의 결과를 반환합니다(첫 번째 << 두 번째).

형식:

BIN\_SHL( <number>, <number> )

예제:

select bin\_shl(flags1, 1) from x;

---—-

BIN_SHR

---—-

기능:

인수에 대해 수행된 이진 오른쪽 시프트 연산의 결과를 반환합니다(첫 번째 >> 두 번째).

형식:

BIN\_SHR( <number>, <number> )

예제:

select bin\_shr(flags1, 1) from x;

---—-

BIN_XOR

---—-

기능:

모든 인수에 대해 수행된 이진 XOR 연산의 결과를 반환합니다.

형식:

BIN\_XOR( <number>, <number> \[, <number> ...\] )

예제:

select bin\_xor(flags1, flags2) from x;

---———–

CEIL | CEILING

---———–

기능:

입력 인수보다 크거나 같은 가장 작은 정수를 나타내는 값을

반환합니다.

형식:

{ CEIL \| CEILING }( <number> )

예제:

1) select ceil(val) from x;

2) select ceil(2.1), ceil(-2.1) from rdb$database;  -- 3, -2를 반환

---———

CHAR_TO_UUID

---———

기능:

UUID의 CHAR(32) ASCII 표현

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)을 CHAR(16) OCTETS

표현(저장에 최적화됨)으로 변환합니다.

형식:

CHAR\_TO\_UUID( <string> )

중요 (빅 엔디언 서버의 경우):

Firebird 2.5.2 이전에는 빅 엔디언 서버에서 CHAR\_TO\_UUID와 UUID\_TO\_CHAR가

잘못 동작하는 것이 발견되었습니다. 이러한 머신에서는 변환 시 바이트/문자가

교체되어 잘못된 위치로 이동합니다. 이 버그는 2.5.2와 3.0에서 수정되었지만,

이는 이제 이 함수들이 (동일한 입력 매개변수에 대해) 이전과 다른 값을

반환한다는 것을 의미합니다.

예제:

select char\_to\_uuid('93519227-8D50-4E47-81AA-8F6678C096A1') from rdb$database;

참고: GEN_UUID 및 UUID_TO_CHAR

---

COS

---

기능:

각도의 코사인을 반환합니다(라디안 단위).

형식:

COS( <number> )

참고:

각도는 라디안으로 지정되며, -1에서 1 범위의 값을 반환합니다.

예제:

select cos(x) from y;

----

COSH

----

기능:

각도의 쌍곡선 코사인을 반환합니다(라디안 단위).

형식:

COSH( <number> )

예제:

select cosh(x) from y;

---

COT

---

기능:

1 / tan(인수)를 반환합니다.

형식:

COT( <number> )

예제:

select cot(x) from y;

---—-

DATEADD

---—-

기능:

지정된 시간만큼 증가(음수인 경우 감소)된 날짜/시간/타임스탬프 값을

반환합니다.

형식:

DATEADD( <number> <timestamp\_part> TO <date\_time> )

DATEADD( <timestamp\_part>, <number>, <date\_time> )

timestamp\_part ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }

참고:

1) WEEKDAY와 YEARDAY는 사용할 수 없습니다. 의미가 없습니다.

2) YEAR, MONTH, DAY는 시간 값과 함께 사용할 수 없습니다.

3) 모든 timestamp\_part 값은 타임스탬프 값과 함께 사용할 수 있습니다.

4) DATEADD와 날짜에 hour, minute, second, millisecond를 사용할 때, 더하거나

    빼는 양은 효과를 내기 위해 최소 하루를 차지해야 합니다(즉, 날짜에 23시간을 더해도

    증가하지 않습니다).

예제:

select dateadd(-1 day to current\_date) as yesterday

    from rdb$database;

---—–

DATEDIFF

---—–

기능:

첫 번째 날짜/시간/타임스탬프 값에서 두 번째 값까지의 시간 양을 나타내는

정확한 숫자 값을 반환합니다.

형식:

DATEDIFF( <timestamp\_part> FROM <date\_time> TO <date\_time> )

DATEDIFF( <timestamp\_part>, <date\_time>, <date\_time> )

timestamp\_part ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }

참고:

1) 두 번째 값이 첫 번째 값보다 크면 양수 값을 반환하고,

   첫 번째 값이 크면 음수, 같으면 0을 반환합니다.

2) 날짜와 시간 값의 비교는 유효하지 않습니다.

3) WEEKDAY와 YEARDAY는 사용할 수 없습니다. 의미가 없습니다.

4) YEAR, MONTH, DAY는 시간 값과 함께 사용할 수 없습니다.

5) 모든 timestamp\_part 값은 타임스탬프 값과 함께 사용할 수 있습니다.

예제:

select datediff(week from cast('yesterday' as timestamp) - 7 to current\_timestamp)

    from rdb$database;

---—

DECODE

---—

기능:

DECODE는 CASE ... WHEN ... ELSE 표현식의 단축형입니다.

형식:

DECODE( <expression>, <search>, <result> \[ , <search>, <result> ... \] \[, <default> \]

예제:

select decode(state, 0, 'deleted', 1, 'active', 'unknown') from things;

---

EXP

---

기능:

인수의 지수 e를 반환합니다.

형식:

EXP( <number> )

예:

select exp(x) from y;

---–

FLOOR

---–

기능:

입력 인수보다 작거나 같은 가장 큰 정수를 나타내는 값을 반환합니다.

형식:

FLOOR( <number> )

예:

1) select floor(val) from x;

2) select floor(2.1), floor(-2.1) from rdb$database;  -- returns 2, -3

---—–

GEN_UUID

---—–

기능:

CHAR(16) OCTETS 유형의 범용 고유 번호를 반환합니다.

형식:

GEN\_UUID()

중요:

Firebird 2.5.2 이전에는 GEN\_UUID가 완전히 무작위 문자열을 반환했습니다. 이는

RFC-4122(UUID 사양)를 준수하지 않습니다.

이는 Firebird 2.5.2 및 3.0에서 수정되었습니다. 이제 GEN\_UUID는 준수하는 UUID 버전 4

문자열을 반환하며, 일부 비트는 예약되고 나머지는 무작위입니다. 준수하는

UUID의 문자열 형식은 XXXXXXXX-XXXX-4XXX-YXXX-XXXXXXXXXXXX이며, 여기서 4는 고정(버전)이고 Y는 8, 9, A 또는 B입니다.

예:

insert into records (id) value (gen\_uuid());

참고: CHAR_TO_UUID 및 UUID_TO_CHAR

----

HASH

----

기능:

문자열의 HASH를 반환합니다.

형식:

HASH( <string> )

예:

select hash(x) from y;

----

LEFT

----

기능:

문자열의 시작 부분에 나타나는 지정된 길이의 부분 문자열을 반환합니다.

형식:

LEFT( <string>, <number> )

예:

select left(name, char\_length(name) - 10)

    from people

    where name like '% FERNANDES';

–

LN

–

기능:

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

형식:

LN( <number> )

예:

select ln(x) from y;

---

LOG

---

기능:

LOG(x, y)는 y의 밑이 x인 로그를 반환합니다.

형식:

LOG( <number>, <number> )

예:

select log(x, 10) from y;

---–

LOG10

---–

기능:

숫자의 밑이 10인 로그를 반환합니다.

형식:

LOG10( <number> )

예:

select log10(x) from y;

----

LPAD

----

기능:

LPAD(string1, length, string2)는 결과 문자열의 길이가 length와 같아질 때까지

string2를 string1의 시작 부분에 추가합니다.

형식:

LPAD( <string>, <number> \[, <string> \] )

참고:

1) 두 번째 문자열을 생략하면 기본값은 공백 하나입니다.

2) 결과 문자열이 length보다 커지면 두 번째 문자열이 잘립니다.

3) 첫 번째 문자열의 길이가 length 매개변수보다 크면 첫 번째 문자열이 잘립니다.

예:

select lpad(x, 10) from y;

---—–

MAXVALUE

---—–

기능:

값 목록의 최대값을 반환합니다.

형식:

MAXVALUE( <value> \[, <value> ...\] )

예:

select maxvalue(v1, v2, 10) from x;

---—–

MINVALUE

---—–

기능:

값 목록의 최소값을 반환합니다.

형식:

MINVALUE( <value> \[, <value> ...\] )

예:

select minvalue(v1, v2, 10) from x;

---

MOD

---

기능:

MOD(X, Y)는 X를 Y로 나눈 나머지 부분을 반환합니다.

형식:

MOD( <number>, <number> )

예:

select mod(x, 10) from y;

---—-

OVERLAY

---—-

기능:

OVERLAY( <string1> PLACING <string2> FROM <start> \[ FOR <length> \] )는

string1에서 start부터 length까지의 부분 문자열을 string2로 대체한 결과를 반환합니다.

형식:

OVERLAY( <string> PLACING <string> FROM <number> \[ FOR <number> \] )

참고:

1) <length>를 지정하지 않으면 CHAR\_LENGTH( <string2> )가 암시됩니다.

2) OVERLAY 함수는 다음과 동일합니다:

       SUBSTRING(<string1> FROM 1 FOR <start> - 1) \|\|

       <string2> \|\|

       SUBSTRING(<string1> FROM <start> + <length>)

–

PI

–

기능:

PI 상수(3.1459...)를 반환합니다.

형식:

PI()

예:

val = PI();

---—–

POSITION

---—–

기능:

오프셋(생략 시 처음부터)에서 시작하여 두 번째 문자열 내에서 첫 번째 문자열의 위치를 반환합니다. 찾지 못하면 0을 반환합니다.

형식:

POSITION( <string> IN <string> )

POSITION( <string>, <string> \[, <number>\] )

예:

select rdb$relation\_name

    from rdb$relations

    where position('RDB$' IN rdb$relation\_name) = 1;

---–

POWER

---–

기능:

POWER(X, Y)는 X의 Y제곱을 반환합니다.

형식:

POWER( <number>, <number> )

예:

select power(x, 10) from y;

----

RAND

----

기능:

0과 1 사이의 난수를 반환합니다.

형식:

RAND()

예:

select \* from x order by rand();

---—-

REPLACE

---—-

기능:

REPLACE(searched, find, replacement)는 "searched"에서 "find"의 모든 발생을

"replacement"로 대체합니다.

형식:

REPLACE( <string>, <string>, <string> )

예:

select replace(x, ' ', ',') from y;

---—-

REVERSE

---—-

기능:

문자열을 역순으로 반환합니다.

형식:

REVERSE( <value> )

참고:

REVERSE는 문자열을 오른쪽에서 왼쪽으로 인덱싱하는 데 유용한 함수입니다.

예:

create index people\_email on people computed by (reverse(email));

select \* from people where reverse(email) starting with reverse('.br');

---–

RIGHT

---–

기능:

RIGHT(string, length)

문자열의 끝 부분에 나타나는 지정된 길이의 부분 문자열을 반환합니다.

형식:

RIGHT( <string>, <number> )

예:

select right(rdb$relation\_name, char\_length(rdb$relation\_name) - 4)

    from rdb$relations

    where rdb$relation\_name like 'RDB$%';

---–

ROUND

---–

기능:

ROUND(number, scale)

지정된 소수 자릿수로 반올림된 숫자를 반환합니다.

형식:

ROUND( <number> \[, <number> \] )

참고:

소수 자릿수(두 번째 매개변수)가 음수이면 값의 정수 부분이

반올림됩니다. 예: ROUND(123.456, -1)은 120.000을 반환합니다.

예:

select round(salary \* 1.1, 0) from people;

----

RPAD

----

기능:

RPAD(string1, length, string2)는 결과 문자열의 길이가 length와 같아질 때까지

string2를 string1의 끝 부분에 추가합니다.

형식:

RPAD( <string>, <number> \[, <string> \] )

참고:

1) 두 번째 문자열을 생략하면 기본값은 공백 하나입니다.

2) 결과 문자열이 length보다 커지면 두 번째 문자열이 잘립니다.

3) 첫 번째 문자열의 길이가 length 매개변수보다 크면 첫 번째 문자열이 잘립니다.

예:

select rpad(x, 10) from y;

----

SIGN

----

기능:

입력 값이 각각 양수, 0 또는 음수인지에 따라 1, 0 또는 -1을 반환합니다.

형식:

SIGN( <number> )

예:

select sign(x) from y;

---

SIN

---

기능:

각도(라디안으로 표시)의 사인을 반환합니다.

형식:

SIN( <number> )

참고:

SIN의 인수는 라디안으로 지정해야 합니다.

예:

select sin(x) from y;

----

SINH

----

기능:

각도(라디안으로 표시)의 쌍곡선 사인을 반환합니다.

형식:

SINH( <number> )

예:

select sinh(x) from y;

----

SQRT

----

기능:

숫자의 제곱근을 반환합니다.

형식:

SQRT( <number> )

예:

select sqrt(x) from y;

---

TAN

---

기능:

각도(라디안으로 표시)의 탄젠트를 반환합니다.

형식:

TAN( <number> )

참고:

TAN의 인수는 라디안으로 지정해야 합니다.

예:

select tan(x) from y;

----

TANH

----

기능:

각도(라디안으로 표시)의 쌍곡선 탄젠트를 반환합니다.

형식:

TANH( <number> )

예:

select tanh(x) from y;

---–

TRUNC

---–

기능:

TRUNC(number, scale)

숫자의 (지정된 소수 자릿수까지의) 정수 부분을 반환합니다.

형식:

TRUNC( <number> \[, <number> \] )

참고:

소수 자릿수(두 번째 매개변수)가 음수이면 값의 정수 부분이

잘립니다. 예: TRUNC(123.456, -1)은 120.000을 반환합니다.

예:

1) select trunc(x) from y;
  1. select trunc(-2.8), trunc(2.8) from rdb$database; – -2, 2를 반환합니다

    1. select trunc(987.65, 1), trunc(987.65, -1) from rdb$database; – 987.60, 980.00을 반환합니다

---———

UUID_TO_CHAR

---———

기능:

CHAR(16) OCTETS UUID(GEN\_UUID에서 반환됨)를

CHAR(32) ASCII 표현(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)으로 변환합니다.

형식:

UUID\_TO\_CHAR( <string> )

중요 (빅엔디언 서버의 경우):

Firebird 2.5.2 이전 버전에서는 CHAR\_TO\_UUID 및 UUID\_TO\_CHAR가

빅엔디언 서버에서 잘못 동작하는 것으로 밝혀졌습니다. 이러한 머신에서는 변환 시

바이트/문자가 서로 바뀌어 잘못된 위치에 배치됩니다. 이 버그는 2.5.2 및 3.0에서 수정되었지만,

이는 이제 이 함수들이 (동일한 입력 매개변수에 대해) 이전과 다른 값을 반환한다는 것을 의미합니다.

예:

select uuid\_to\_char(gen\_uuid()) from rdb$database;

참고: GEN_UUID 및 CHAR_TO_UUID