Trong Cơ sở dữ liệu Oracle, CURRENT_TIMESTAMP()
hàm trả về ngày và giờ hiện tại trong múi giờ phiên, trong một giá trị của kiểu dữ liệu TIMESTAMP WITH TIME ZONE
.
Nó tương tự như LOCALTIMESTAMP
, ngoại trừ LOCALTIMESTAMP
trả về một TIMESTAMP
giá trị.
Cú pháp
Cú pháp như sau:
CURRENT_TIMESTAMP [ (precision) ]
Trong đó precision
tùy chọn đối số chỉ định độ chính xác phân số giây của giá trị thời gian được trả về.
Khi gọi hàm mà không có đối số, dấu ngoặc đơn phải được bỏ qua.
Ví dụ
Dưới đây là một ví dụ về cách gọi hàm mà không chỉ định độ chính xác:
SELECT CURRENT_TIMESTAMP
FROM DUAL;
Kết quả:
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
Ví dụ này hiển thị ngày ở định dạng dựa trên giá trị của NLS_DATE_FORMAT
trong hệ thống của tôi tham số (hiện là DD/MON/RR
). Tham số này lấy giá trị của nó từ NLS_TERRITORY
tham số (trong đó của tôi là AUSTRALIA
).
Chúng tôi có tùy chọn thay đổi các tham số này (ví dụ:xem Cách thay đổi định dạng ngày trong phiên Oracle của bạn).
Ngoài ra, chúng ta có thể sử dụng một hàm như TO_CHAR()
để trả về kết quả ở một định dạng khác.
Ví dụ:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Kết quả:
2021-08-06 08:44:39
Độ chính xác
Dưới đây là một ví dụ chỉ định độ chính xác. này xác định độ chính xác phân số giây của giá trị thời gian được trả về.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Kết quả:
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
Lưu ý rằng đối số chính xác phải là một số từ 0 đến 9.
Dưới đây là những gì sẽ xảy ra khi chúng tôi chuyển một giá trị nằm ngoài phạm vi đó:
SELECT CURRENT_TIMESTAMP(10)
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT CURRENT_TIMESTAMP(10) FROM DUAL Error at Command Line : 1 Column : 26 Error report - SQL Error: ORA-30088: datetime/interval precision is out of range 30088. 00000 - "datetime/interval precision is out of range" *Cause: The specified datetime/interval precision was not between 0 and 9. *Action: Use a value between 0 and 9 for datetime/interval precision.
Bỏ qua dấu ngoặc đơn mà không chỉ định độ chính xác
Như đã đề cập, khi gọi CURRENT_TIMESTAMP
mà không chuyển precision
đối số, bạn cần bỏ qua dấu ngoặc đơn.
Dưới đây là những gì sẽ xảy ra khi chúng tôi bao gồm các dấu ngoặc đơn mà không chỉ định độ chính xác:
SELECT CURRENT_TIMESTAMP()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT CURRENT_TIMESTAMP() FROM DUAL Error at Command Line : 1 Column : 26 Error report - SQL Error: ORA-30088: datetime/interval precision is out of range 30088. 00000 - "datetime/interval precision is out of range" *Cause: The specified datetime/interval precision was not between 0 and 9. *Action: Use a value between 0 and 9 for datetime/interval precision.
Chúng tôi gặp lỗi tương tự như trong ví dụ trước. Cơ sở dữ liệu Oracle đang tìm kiếm một đối số chính xác giữa 0 và 9, nhưng chúng tôi không vượt qua.
Đối số rỗng
Lỗi tương tự xảy ra khi chuyển null
:
SELECT CURRENT_TIMESTAMP(null)
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT CURRENT_TIMESTAMP(null) FROM DUAL Error at Command Line : 1 Column : 26 Error report - SQL Error: ORA-30088: datetime/interval precision is out of range 30088. 00000 - "datetime/interval precision is out of range" *Cause: The specified datetime/interval precision was not between 0 and 9. *Action: Use a value between 0 and 9 for datetime/interval precision.