Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Thư viện IBSurgeon

Các hàm tích hợp sẵn của Firebird 3.0 (SDF hay còn gọi là Server Defined Functions)

Các hàm dựng sẵn dưới đây (trừ DECODE) chỉ được sử dụng nếu không có

UDF nào được khai báo cùng tên.

Sự lựa chọn giữa UDF hoặc hàm hệ thống này được quyết định khi biên dịch

câu lệnh và không thay đổi nếu câu lệnh được lưu trữ (trigger / SP).

Tác giả:

Adriano dos Santos Fernandes <[email protected]>

Oleg Loa <[email protected]>

Alexey Karyakin <[email protected]>

Claudio Valderrama C. <cvalde at usa.net>

---

ABS

---

Chức năng:

Trả về giá trị tuyệt đối của một số.

Định dạng:

ABS( <số> )

Ví dụ:

select abs(amount) from transactions;

----

ACOS

----

Chức năng:

Trả về arccosin của một số.

Định dạng:

ACOS( <số> )

Ghi chú:

Đối số của ACOS phải nằm trong khoảng từ -1 đến 1 và trả về giá trị trong

khoảng từ 0 đến PI.

Ví dụ:

select acos(x) from y;

---–

ACOSH

---–

Chức năng:

Trả về arccosin hyperbol của một số (được biểu thị bằng radian).

Định dạng:

ACOSH( <số> )

Ví dụ:

select acosh(x) from y;

---——-

ASCII_CHAR

---——-

Chức năng:

Trả về ký tự ASCII có mã được chỉ định.

Định dạng:

ASCII\_CHAR( <số> )

Ghi chú:

Đối số của ASCII\_CHAR phải nằm trong khoảng từ 0 đến 255 và trả về giá trị

với bộ ký tự NONE.

Ví dụ:

select ascii\_char(x) from y;

---——

ASCII_VAL

---——

Chức năng:

Trả về mã ASCII của ký tự đầu tiên của chuỗi được chỉ định.

Định dạng:

ASCII\_VAL( <chuỗi> )

Ghi chú:

1) Trả về 0 nếu chuỗi rỗng.

2) Ném lỗi nếu ký tự đầu tiên là đa byte.

Ví dụ:

select ascii\_val(x) from y;

----

ASIN

----

Chức năng:

Trả về arcsin của một số.

Định dạng:

ASIN( <số> )

Ghi chú:

Đối số của ASIN phải nằm trong khoảng từ -1 đến 1 và trả về giá trị trong

khoảng từ -PI / 2 đến PI / 2.

Ví dụ:

select asin(x) from y;

---–

ASINH

---–

Chức năng:

Trả về arcsin hyperbol của một số (được biểu thị bằng radian).

Định dạng:

ASINH( <số> )

Ví dụ:

select asinh(x) from y;

----

ATAN

----

Chức năng:

Trả về arctang của một số.

Định dạng:

ATAN( <số> )

Ghi chú:

Trả về giá trị trong khoảng từ -PI / 2 đến PI / 2.

Ví dụ:

select atan(x) from y;

---–

ATAN2

---–

Chức năng:

Trả về arctang của số thứ nhất / số thứ hai.

Định dạng:

ATAN( <số>, <số> )

Ghi chú:

Trả về giá trị trong khoảng từ -PI đến PI.

Ví dụ:

select atan2(x, y) from z;

---–

ATANH

---–

Chức năng:

Trả về arctang hyperbol của một số (được biểu thị bằng radian).

Định dạng:

ATANH( <số> )

Ví dụ:

select atanh(x) from y;

---—-

BIN_AND

---—-

Chức năng:

Trả về kết quả của phép toán AND nhị phân được thực hiện trên tất cả các đối số.

Định dạng:

BIN\_AND( <số>, <số> \[, <số> ...\] )

Ví dụ:

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

---—-

BIN_NOT

---—-

Chức năng:

Trả về kết quả của phép toán NOT theo bit được thực hiện trên đối số của nó.

Định dạng:

BIN\_NOT( <số> )

Ví dụ:

select bin\_not(flags) from x;

---—

BIN_OR

---—

Chức năng:

Trả về kết quả của phép toán OR nhị phân được thực hiện trên tất cả các đối số.

Định dạng:

BIN\_OR( <số>, <số> \[, <số> ...\] )

Ví dụ:

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

---—-

BIN_SHL

---—-

Chức năng:

Trả về kết quả của phép toán dịch trái nhị phân được thực hiện trên các đối số (thứ nhất << thứ hai).

Định dạng:

BIN\_SHL( <số>, <số> )

Ví dụ:

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

---—-

BIN_SHR

---—-

Chức năng:

Trả về kết quả của phép toán dịch phải nhị phân được thực hiện trên các đối số (thứ nhất >> thứ hai).

Định dạng:

BIN\_SHR( <số>, <số> )

Ví dụ:

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

---—-

BIN_XOR

---—-

Chức năng:

Trả về kết quả của phép toán XOR nhị phân được thực hiện trên tất cả các đối số.

Định dạng:

BIN\_XOR( <số>, <số> \[, <số> ...\] )

Ví dụ:

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

---———–

CEIL | CEILING

---———–

Chức năng:

Trả về một giá trị đại diện cho số nguyên nhỏ nhất lớn hơn

hoặc bằng đối số đầu vào.

Định dạng:

{ CEIL \| CEILING }( <số> )

Ví dụ:

1) select ceil(val) from x;

2) select ceil(2.1), ceil(-2.1) from rdb$database;  -- trả về 3, -2

---———

CHAR_TO_UUID

---———

Chức năng:

Chuyển đổi biểu diễn ASCII CHAR(32) của một UUID

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) sang biểu diễn CHAR(16) OCTETS

(được tối ưu hóa cho lưu trữ).

Định dạng:

CHAR\_TO\_UUID( <chuỗi> )

Quan trọng (đối với máy chủ big-endian):

Người ta đã phát hiện ra rằng trước Firebird 2.5.2, CHAR\_TO\_UUID và UUID\_TO\_CHAR hoạt động

không chính xác trên máy chủ big-endian. Trên các máy này, byte/ký tự bị hoán đổi và đi vào

vị trí sai khi chuyển đổi. Lỗi này đã được sửa trong 2.5.2 và 3.0, nhưng điều đó có nghĩa là các

hàm này hiện trả về các giá trị khác (cho cùng tham số đầu vào) so với trước đây.

Ví dụ:

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

Xem thêm: GEN_UUID và UUID_TO_CHAR

---

COS

---

Chức năng:

Trả về cosin của một góc (được biểu thị bằng radian).

Định dạng:

COS( <số> )

Ghi chú:

Góc được chỉ định bằng radian và trả về giá trị trong khoảng từ -1 đến 1.

Ví dụ:

select cos(x) from y;

----

COSH

----

Chức năng:

Trả về cosin hyperbol của một góc (được biểu thị bằng radian).

Định dạng:

COSH( <số> )

Ví dụ:

select cosh(x) from y;

---

COT

---

Chức năng:

Trả về 1 / tan(đối số).

Định dạng:

COT( <số> )

Ví dụ:

select cot(x) from y;

---—-

DATEADD

---—-

Chức năng:

Trả về giá trị ngày/giờ/dấu thời gian được tăng (hoặc giảm, khi âm)

một khoảng thời gian được chỉ định.

Định dạng:

DATEADD( <số> <phần\_dấu\_thời\_gian> TO <ngày\_giờ> )

DATEADD( <phần\_dấu\_thời\_gian>, <số>, <ngày\_giờ> )

phần\_dấu\_thời\_gian ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }

Ghi chú:

1) WEEKDAY và YEARDAY không thể được sử dụng. Điều đó không có ý nghĩa.

2) YEAR, MONTH và DAY không thể được sử dụng với giá trị thời gian.

3) Tất cả các giá trị phần\_dấu\_thời\_gian có thể được sử dụng với giá trị dấu thời gian.

4) Khi sử dụng giờ, phút, giây và mili giây cho DATEADD và ngày, số lượng được thêm hoặc

    trừ phải tính ít nhất một ngày để tạo hiệu quả (tức là thêm 23 giờ vào một ngày

    không làm tăng nó).

Ví dụ:

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

    from rdb$database;

---—–

DATEDIFF

---—–

Chức năng:

Trả về một giá trị số chính xác đại diện cho khoảng thời gian từ giá trị

ngày/giờ/dấu thời gian đầu tiên đến giá trị thứ hai.

Định dạng:

DATEDIFF( <phần\_dấu\_thời\_gian> FROM <ngày\_giờ> TO <ngày\_giờ> )

DATEDIFF( <phần\_dấu\_thời\_gian>, <ngày\_giờ>, <ngày\_giờ> )

phần\_dấu\_thời\_gian ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }

Ghi chú:

1) Trả về giá trị dương nếu giá trị thứ hai lớn hơn giá trị thứ nhất,

   âm khi giá trị thứ nhất lớn hơn hoặc bằng không khi chúng bằng nhau.

2) So sánh ngày với giá trị thời gian là không hợp lệ.

3) WEEKDAY và YEARDAY không thể được sử dụng. Điều đó không có ý nghĩa.

4) YEAR, MONTH và DAY không thể được sử dụng với giá trị thời gian.

5) Tất cả các giá trị phần\_dấu\_thời\_gian có thể được sử dụng với giá trị dấu thời gian.

Ví dụ:

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

    from rdb$database;

---—

DECODE

---—

Chức năng:

DECODE là một phím tắt cho biểu thức CASE ... WHEN ... ELSE.

Định dạng:

DECODE( <biểu\_thức>, <tìm\_kiếm>, <kết\_quả> \[ , <tìm\_kiếm>, <kết\_quả> ... \] \[, <mặc\_định> \]

Ví dụ:

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

---

EXP

---

Chức năng:

Trả về số mũ e của đối số.

Định dạng:

EXP( <số> )

Ví dụ:

select exp(x) from y;

---–

FLOOR

---–

Chức năng:

Trả về một giá trị đại diện cho số nguyên lớn nhất nhỏ hơn

hoặc bằng đối số đầu vào.

Định dạng:

FLOOR( <số> )

Ví dụ:

1) select floor(val) from x;

2) select floor(2.1), floor(-2.1) from rdb$database;  -- trả về 2, -3

---—–

GEN_UUID

---—–

Chức năng:

Trả về một số duy nhất phổ quát ở kiểu CHAR(16) OCTETS.

Định dạng:

GEN\_UUID()

Quan trọng:

Trước Firebird 2.5.2, GEN\_UUID trả về các chuỗi hoàn toàn ngẫu nhiên. Điều này không tuân thủ

RFC-4122 (đặc tả UUID).

Điều này đã được sửa trong Firebird 2.5.2 và 3.0. Bây giờ GEN\_UUID trả về một chuỗi UUID phiên bản 4

tuân thủ, trong đó một số bit được dành riêng và các bit khác là ngẫu nhiên. Định dạng chuỗi của một UUID

tuân thủ là XXXXXXXX-XXXX-4XXX-YXXX-XXXXXXXXXXXX, trong đó 4 là cố định (phiên bản) và Y là 8, 9, A hoặc B.

Ví dụ:

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

Xem thêm: CHAR_TO_UUID và UUID_TO_CHAR

----

HASH

----

Chức năng:

Trả về một HASH của một chuỗi.

Định dạng:

HASH( <chuỗi> )

Ví dụ:

select hash(x) from y;

----

LEFT

----

Chức năng:

Trả về chuỗi con có độ dài được chỉ định xuất hiện ở đầu một chuỗi.

Định dạng:

LEFT( <chuỗi>, <số> )

Ví dụ:

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

    from people

    where name like '% FERNANDES';

LN

Chức năng:

Trả về logarit tự nhiên của một số.

Định dạng:

LN( <số> )

Ví dụ:

select ln(x) from y;

---

LOG

---

Chức năng:

LOG(x, y) trả về logarit cơ số x của y.

Định dạng:

LOG( <số>, <số> )

Ví dụ:

select log(x, 10) from y;

---–

LOG10

---–

Chức năng:

Trả về logarit cơ số mười của một số.

Định dạng:

LOG10( <số> )

Ví dụ:

select log10(x) from y;

----

LPAD

----

Chức năng:

LPAD(string1, length, string2) nối string2 vào đầu

string1 cho đến khi độ dài của chuỗi kết quả trở nên bằng length.

Định dạng:

LPAD( <chuỗi>, <số> \[, <chuỗi> \] )

Ghi chú:

1) Nếu chuỗi thứ hai được bỏ qua, giá trị mặc định là một khoảng trắng.

2) Chuỗi thứ hai bị cắt bớt khi chuỗi kết quả sẽ

   trở nên lớn hơn length.

3) Chuỗi đầu tiên bị cắt bớt nếu độ dài của nó lớn hơn tham số

   length.

Ví dụ:

select lpad(x, 10) from y;

---—–

MAXVALUE

---—–

Chức năng:

Trả về giá trị tối đa của một danh sách các giá trị.

Định dạng:

MAXVALUE( <giá\_trị> \[, <giá\_trị> ...\] )

Ví dụ:

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

---—–

MINVALUE

---—–

Chức năng:

Trả về giá trị tối thiểu của một danh sách các giá trị.

Định dạng:

MINVALUE( <giá\_trị> \[, <giá\_trị> ...\] )

Ví dụ:

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

---

MOD

---

Chức năng:

MOD(X, Y) trả về phần dư của phép chia X cho Y.

Định dạng:

MOD( <số>, <số> )

Ví dụ:

select mod(x, 10) from y;

---—-

OVERLAY

---—-

Chức năng:

OVERLAY( <chuỗi1> PLACING <chuỗi2> FROM <bắt\_đầu> \[ FOR <độ\_dài> \] ) trả về

chuỗi1 thay thế chuỗi con FROM bắt\_đầu FOR độ\_dài bằng chuỗi2.

Định dạng:

OVERLAY( <chuỗi> PLACING <chuỗi> FROM <số> \[ FOR <số> \] )

Ghi chú:

1) Nếu <độ\_dài> không được chỉ định, CHAR\_LENGTH( <chuỗi2> ) được ngụ ý.

2) Hàm OVERLAY tương đương với:

       SUBSTRING(<chuỗi1> FROM 1 FOR <bắt\_đầu> - 1) \|\|

       <chuỗi2> \|\|

       SUBSTRING(<chuỗi1> FROM <bắt\_đầu> + <độ\_dài>)

PI

Chức năng:

Trả về hằng số PI (3.1459...).

Định dạng:

PI()

Ví dụ:

val = PI();

---—–

POSITION

---—–

Chức năng:

Trả về vị trí của chuỗi đầu tiên bên trong chuỗi thứ hai bắt đầu từ

một độ lệch (hoặc từ đầu khi được bỏ qua). Khi không tìm thấy, trả về 0.

Định dạng:

POSITION( <chuỗi> IN <chuỗi> )

POSITION( <chuỗi>, <chuỗi> \[, <số> \] )

Ví dụ:

select rdb$relation\_name

    from rdb$relations

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

---–

POWER

---–

Hàm:

POWER(X, Y) trả về X lũy thừa Y.

Định dạng:

POWER( <số>, <số> )

Ví dụ:

select power(x, 10) from y;

----

RAND

----

Hàm:

Trả về một số ngẫu nhiên từ 0 đến 1.

Định dạng:

RAND()

Ví dụ:

select \* from x order by rand();

---—-

REPLACE

---—-

Hàm:

REPLACE(searched, find, replacement) thay thế tất cả các lần xuất hiện của "find"

trong "searched" bằng "replacement".

Định dạng:

REPLACE( <chuỗi>, <chuỗi>, <chuỗi> )

Ví dụ:

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

---—-

REVERSE

---—-

Hàm:

Trả về một chuỗi theo thứ tự đảo ngược.

Định dạng:

REVERSE( <giá trị> )

Ghi chú:

REVERSE là một hàm hữu ích để lập chỉ mục chuỗi từ phải sang trái.

Ví dụ:

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

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

---–

RIGHT

---–

Hàm:

RIGHT(string, length)

Trả về chuỗi con có độ dài xác định nằm ở cuối một chuỗi.

Định dạng:

RIGHT( <chuỗi>, <số> )

Ví dụ:

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

    from rdb$relations

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

---–

ROUND

---–

Hàm:

ROUND(number, scale)

Trả về một số được làm tròn đến scale xác định.

Định dạng:

ROUND( <số> \[, <số> \] )

Ghi chú:

Nếu scale (tham số thứ hai) là số âm, phần nguyên của

giá trị sẽ được làm tròn. Ví dụ: ROUND(123.456, -1) trả về 120.000.

Ví dụ:

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

----

RPAD

----

Hàm:

RPAD(string1, length, string2) nối string2 vào cuối

string1 cho đến khi độ dài của chuỗi kết quả bằng length.

Định dạng:

RPAD( <chuỗi>, <số> \[, <chuỗi> \] )

Ghi chú:

1) Nếu chuỗi thứ hai được bỏ qua, giá trị mặc định là một khoảng trắng.

2) Chuỗi thứ hai bị cắt bớt khi chuỗi kết quả sẽ

   trở nên lớn hơn length.

3) Chuỗi thứ nhất bị cắt bớt nếu độ dài của nó lớn hơn tham số length.

Ví dụ:

select rpad(x, 10) from y;

----

SIGN

----

Hàm:

Trả về 1, 0, hoặc -1 tùy thuộc vào việc giá trị đầu vào là dương, bằng không hay

âm, tương ứng.

Định dạng:

SIGN( <số> )

Ví dụ:

select sign(x) from y;

---

SIN

---

Hàm:

Trả về sin của một góc (được biểu thị bằng radian).

Định dạng:

SIN( <số> )

Ghi chú:

Đối số của SIN phải được chỉ định bằng radian.

Ví dụ:

select sin(x) from y;

----

SINH

----

Hàm:

Trả về sin hyperbol của một góc (được biểu thị bằng radian).

Định dạng:

SINH( <số> )

Ví dụ:

select sinh(x) from y;

----

SQRT

----

Hàm:

Trả về căn bậc hai của một số.

Định dạng:

SQRT( <số> )

Ví dụ:

select sqrt(x) from y;

---

TAN

---

Hàm:

Trả về tang của một góc (được biểu thị bằng radian).

Định dạng:

TAN( <số> )

Ghi chú:

Đối số của TAN phải được chỉ định bằng radian.

Ví dụ:

select tan(x) from y;

----

TANH

----

Hàm:

Trả về tang hyperbol của một góc (được biểu thị bằng radian).

Định dạng:

TANH( <số> )

Ví dụ:

select tanh(x) from y;

---–

TRUNC

---–

Hàm:

TRUNC(number, scale)

Trả về phần nguyên (đến scale xác định) của một số.

Định dạng:

TRUNC( <số> \[, <số> \] )

Ghi chú:

Nếu scale (tham số thứ hai) là số âm, phần nguyên của

giá trị sẽ bị cắt bớt. Ví dụ: TRUNC(123.456, -1) trả về 120.000.

Ví dụ:

1) select trunc(x) from y;

2) select trunc(-2.8), trunc(2.8) from rdb$database;  -- trả về -2, 2

3) select trunc(987.65, 1), trunc(987.65, -1) from rdb$database;  -- trả về 987.60, 980.00

---———

UUID_TO_CHAR

---———

Hàm:

Chuyển đổi UUID CHAR(16) OCTETS (được trả về bởi GEN\_UUID) sang

biểu diễn ASCII CHAR(32) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).

Định dạng:

UUID\_TO\_CHAR( <chuỗi> )

Quan trọng (đối với máy chủ big-endian):

Người ta đã phát hiện ra rằng trước Firebird 2.5.2, CHAR\_TO\_UUID và UUID\_TO\_CHAR hoạt động

không chính xác trên các máy chủ big-endian. Trên các máy này, byte/ký tự bị hoán đổi và nằm ở

vị trí sai khi chuyển đổi. Lỗi này đã được sửa trong 2.5.2 và 3.0, nhưng điều đó có nghĩa là các

hàm này hiện trả về các giá trị khác (cho cùng tham số đầu vào) so với trước đây.

Ví dụ:

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

Xem thêm: GEN_UUID và CHAR_TO_UUID