Trong Cơ sở dữ liệu Oracle, LOCALTIMESTAMP()
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
.
Nó tương tự như CURRENT_TIMESTAMP
, ngoại trừ CURRENT_TIMESTAMP
đó trả về TIMESTAMP WITH TIME ZONE
giá trị.
Cú pháp
Cú pháp như sau:
LOCALTIMESTAMP [ (timestamp_precision) ]
Trong đó timestamp_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 LOCALTIMESTAMP
FROM DUAL;
Kết quả:
07/AUG/21 08:49:50.026443000 AM
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(LOCALTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Kết quả:
2021-08-07 08:50:20
Độ chính xác
Dưới đây là một ví dụ chỉ định độ chính xác. Điều 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 LOCALTIMESTAMP(9)
FROM DUAL;
Kết quả:
07/AUG/21 08:50:47.203717000 AM
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 LOCALTIMESTAMP(10)
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT LOCALTIMESTAMP(10) FROM DUAL Error at Command Line : 1 Column : 23 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 LOCALTIMESTAMP
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 LOCALTIMESTAMP()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT LOCALTIMESTAMP() FROM DUAL Error at Command Line : 1 Column : 23 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 LOCALTIMESTAMP(null)
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT LOCALTIMESTAMP(null) FROM DUAL Error at Command Line : 1 Column : 23 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.