Chương 9. Hàm và toán tử
9.3. Hàm và toán tử toán học
Các toán tử toán học được cung cấp cho nhiều dạng PostgreSQL. Đối với các dạng không có các qui ước toán học tiêu chuẩn (như các dạng ngày tháng/thời gian – date/time) chúng ta mô tả hành vi thực sự trong các phần tiếp sau.
Bảng 9-2 chỉ ra các toán tử toán học có sẵn.
Bảng 9-2. Các toán tử toán học
Toán tử Mô tả Ví dụ Kết quả
+ cộng 2 + 3 5
- trừ 2 - 3 -1
* nhân 2 * 3 6
/ chia (chia số nguyên sẽ cắt bớt kết quả) 4 / 2 2
% modulo (phần còn lại) 5 % 4 1
^ lũy thừa 2.0 ^ 3.0 8
|/ căn bậc 2 |/ 25.0 5
||/ căn bậc 3 ||/ 27.0 3
! giai thừa 5 ! 120
!! giai thừa (toán tử tiếp đầu ngữ) !! 5 120
@ giá trị tuyệt đối @ -5.0 5
& bitwise AND 91 & 15 11
| bitwise OR 32 | 3 35
# bitwise XOR 17 # 5 20
~ bitwise NOT ~1 -2
<< bitwise dịch trái 1 << 4 16
>> bitwise dịch phải 8 >> 2 2
Các toán tử bitwise chỉ làm việc trong các dạng dữ liệu tích phân, trong khi các toán tử khác là sẵn sàng cho tất cả các dạng dữ liệu số. Các toán tử bitwise cũng sẵn sàng cho các dạng chuỗi bit bit và
bit varying, như được chỉ ra trong bảng 9-10.
Bảng 9-3 chỉ ra các hàm toán học có sẵn. Trong bảng, dp chỉ độ chính xác gấp đôi double precision. Nhiều trong số các hàm đó được đưa ra ở nhiều dạng với các dạng đối số khác nhau. Ngoại trừ ở những nơi được lưu ý, bất kỳ dạng nào của một hàm được đưa ra cũng trả về dạng dữ liệu y hệt như đối số của nó. Các hàm làm việc với các dữ liệu double precision hầu hết được triển khai trên đỉnh của thư viện C hệ thống chủ (host system); độ chính xác và hành vi trong các trường hợp biên vì thế có thể biến đổi, phụ thuộc vào hệ thống chủ đó.
Bảng 9-3. Các hàm toán học
Hàm Dạng trả về Mô tả Ví dụ Kết quả
abs(x) (y hệt như đầu vào) giá trị tuyệt đối abs(-17.4) 17.4
cbrt(dp) dp căn bậc 3 cbrt(27.0) 3
ceil(dp or numeric) (y hệt như đầu vào) số nguyên nhỏ nhất không
nhỏ hơn đối số ceil(-42.8) -42
ceiling(dp or numeric) (y hệt như đầu vào) số nguyên nhỏ nhất không ceiling(-95.3) -95
Hàm Dạng trả về Mô tả Ví dụ Kết quả nhỏ hơn đối số (tên hiệu
cho ceil)
degrees(dp) dp từ radians sang độ degrees(0.5) 28.6478897565412
div(y numeric, x
numeric) numeric thương số số nguyên của
y/x div(9,4) 2
exp(dp or numeric) (y hệt như đầu vào) số mũ exp(1.0) 2.71828182845905 floor(dp or numeric) (y hệt như đầu vào) số nguyên lớn nhất không
lớn hơn đối số floor(-42.8) -43
ln(dp or numeric) (y hệt như đầu vào) logarithm tự nhiên ln(2.0) 0.693147180559945 log(dp or numeric) (y hệt như đầu vào) logarithm cơ số 10 log(100.0) 2
log(b numeric, x
numeric) numeric Logarithm cơ số b Log(2.0, 64.0) 6.0000000000
mod(y, x) (y hệt dạng đối số) phần còn lại của y/x mod(9,4) 1
pi() dp hằng số “π” pi() 3.14159265358979
power(a dp, b dp) dp a lũy thừa b power(9.0, 3.0) 729
power(a numeric, b
numeric) numeric a lũy thừa b Power(9.0, 3.0) 729
radians(dp) dp từ độ sang radians radians(45.0) 0.785398163397448
random() dp giá trị ngẫu nhiên trong
dãy 0.0 <= x < 1.0
random() round(dp or numeric) (y hệt như đầu vào) làm tròn tới số nguyên gần
nhất
round(42.4) 42 round(v numeric, s int) numeric làm tròn tới s dấu thập
phân
round(42.4382, 2)
42.44
setseed(dp) void đặt hạt giống cho các lời
gọi random () tiếp sau (giá trị giữa -1.0 và 1.0, bao gồm 2 số đó)
setseed(0.54823)
sign(dp or numeric) (y hệt như đầu vào) dấu của đối số (-1, 0, +1) sign(-8.4) -1
sqrt(dp or numeric) (y hệt như đầu vào) căn bậc 2 sqrt(2.0) 1.4142135623731 trunc(dp or numeric) (y hệt như đầu vào) cắt ngắn tới 0 trunc(42.8) 42
trunc(v numeric, s int) numeric cắt ngắn tới s dấu thập
phân trunc(42.4382,
2) 42.43
width_bucket(op numeric, b1 numeric, b2 numeric, count int)
int trả về khoảng theo đó toán hạng có thể được chỉ định theo biểu đồ cùng mức với các khoảng tính toán, trong dải b1 tới b2
width_bucket(5.3 5, 0.024, 10.06, 5)
width_bucket(op dp, b1
dp, b2 dp, count int) int trả về khoảng theo đó toán hạng có thể được chỉ định theo biểu đồ cùng mức với các khoảng tính toán, trong dải b1 tới b2
width_bucket(5.3 5, 0.024, 10.06, 5)
Cuối cùng, Bảng 9-4 chỉ ra các hàm lượng giác có sẵn. Tất cả các hàm lượng giác lấy các đối số và trả về các giá trị dạng double precision. Các đối số hàm lượng giác được thể hiện bằng radian. Các hàm ngược trả về các giá trị ở dạng radian. Xem các hàm biến đổi đơn vị radians() và degrees() ở trên.
Bảng 9-4. Các hàm lượng giác
Hàm acos(x) asin(x) atan(x) atan2(y, x) cos(x) cot(x) sin(x) tan(x) Mô tả ngược với
cosine ngược với
sine ngược với
tangent ngược với tangent của y/x
cosine cotangent sine tangent