Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm TO_CHAR (datetime) trong Oracle

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ủa DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE kiểu dữ liệu
  • interval có thể là giá trị của INTERVAL DAY TO SECOND hoặc INTERVAL 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.
  • TIMESTAMPTIMESTAMP 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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách gọi một phương thức siêu đối tượng Oracle PL / SQL

  2. ORA-30926:không thể có được tập hợp hàng ổn định trong bảng nguồn khi Hợp nhất bảng

  3. Vì SQL Server không có các gói, các lập trình viên phải làm gì để giải quyết nó?

  4. Làm thế nào để hiển thị tất cả các đặc quyền từ một người dùng trong oracle?

  5. Thống kê bảng GTT và SYS.WRI $ _OPTSTAT_TAB_HISTORY