Trong Cơ sở dữ liệu Oracle, TO_CHAR(datetime)
hàm chuyển đổi giá trị ngày giờ hoặc khoảng thời gian thành VARCHAR2
giá trị ở định dạng được chỉ định bởi định dạng ngày.
Cú pháp
Cú pháp như sau:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])
Ở đâu:
-
datetime
có thể là giá trị củaDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
kiểu dữ liệu -
interval
có thể là giá trị củaINTERVAL
DAY
TO
SECOND
hoặcINTERVAL
YEAR
TO
MONTH
kiểu dữ liệu -
fmt
là mô hình định dạng tùy chọn chỉ định cách định dạng kết quả -
'nlsparam'
là một đối số tùy chọn chỉ định ngôn ngữ mà các tên và chữ viết tắt của tháng, ngày được trả về.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;
Kết quả:
WED, 26 SEPTEMBER 2035
Vì vậy, nó trả về ngày được cung cấp trong đối số đầu tiên, ở định dạng được chỉ định bởi đối số thứ hai.
Đối số thứ hai cung cấp mô hình định dạng. Mô hình định dạng có thể bao gồm một hoặc nhiều phần tử định dạng. Ví dụ:DY
là một phần tử định dạng, cũng như DD
, MONTH
, v.v.
Xem Danh sách đầy đủ các phần tử định dạng ngày giờ trong Oracle để biết danh sách các phần tử định dạng có thể được sử dụng để định dạng giá trị ngày giờ bằng hàm này.
Định dạng mặc định
Nếu bạn bỏ qua fmt
đối số, kết quả sẽ được chuyển đổi như sau:
-
DATE
các giá trị được chuyển đổi thành giá trị ở định dạng ngày mặc định. -
TIMESTAMP
vàTIMESTAMP
WITH
LOCAL
TIME
ZONE
các giá trị được chuyển đổi thành giá trị ở định dạng dấu thời gian mặc định. -
TIMESTAMP
WITH
TIME
ZONE
các giá trị được chuyển đổi thành giá trị trong dấu thời gian mặc định với định dạng múi giờ. - Các giá trị khoảng thời gian được chuyển đổi thành biểu diễn số của ký tự khoảng thời gian.
Đây là ví dụ về chuyển đổi DATE
giá trị mà không chỉ định định dạng:
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;
Kết quả:
26/SEP/35
Trong trường hợp này, định dạng ngày mặc định của phiên của tôi là DD/MON/RR
, và do đó kết quả phản ánh điều đó. Tôi biết rằng đây là định dạng ngày mặc định trong phiên của tôi vì tôi đã truy vấn V$NLS_PARAMETERS
chế độ xem, hiển thị cho tôi giá trị hiện tại của các tham số NLS.
Xem Cách Kiểm tra Giá trị của Tham số NLS nếu bạn cần kiểm tra chúng.
Ngoài ra, hãy xem Cách thay đổi định dạng ngày của phiên nếu bạn muốn thay đổi định dạng ngày giờ mặc định cho phiên hiện tại của mình.
Khoảng thời gian
Dưới đây là một ví dụ xuất ra giá trị khoảng thời gian ở định dạng mặc định:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;
Kết quả:
+25-02
'nlsparam'
Đối số
'nlsparam'
đối số chỉ định ngôn ngữ mà tên tháng và ngày và các chữ viết tắt được trả về. Đối số này có thể có dạng sau:
'NLS_DATE_LANGUAGE = language'
Ví dụ:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Kết quả:
MIÉ, 26 SEPTIEMBRE 2035
Đối số rỗng
Chuyển null
kết quả là null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Kết quả:
null
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null
xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Thiếu đối số
Gọi hàm mà không chuyển bất kỳ đối số nào, dẫn đến lỗi:
SELECT TO_CHAR()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT TO_CHAR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Chuyển quá nhiều đối số cũng dẫn đến lỗi:
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' ) FROM DUAL Error at Command Line : 1 Column : 72 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: