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;
-
select trunc(-2.8), trunc(2.8) from rdb$database; – -2, 2를 반환합니다
- 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