Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Fungsi TO_CHAR(datetime) di Oracle

Di Oracle Database, TO_CHAR(datetime) fungsi mengonversi nilai waktu atau interval menjadi VARCHAR2 nilai dalam format yang ditentukan oleh format tanggal.

Sintaks

Sintaksnya seperti ini:

TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])

Dimana:

  • datetime dapat berupa nilai DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE tipe data
  • interval dapat berupa nilai INTERVAL DAY TO SECOND , atau INTERVAL YEAR TO MONTH tipe data
  • fmt adalah model format opsional yang menentukan bagaimana hasil harus diformat
  • 'nlsparam' adalah argumen opsional yang menentukan bahasa yang digunakan untuk menampilkan nama dan singkatan bulan dan hari.

Contoh

Berikut ini contoh untuk didemonstrasikan:

SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;

Hasil:

WED, 26 SEPTEMBER 2035

Jadi, ia mengembalikan tanggal yang diberikan dalam argumen pertama, dalam format yang ditentukan oleh argumen kedua.

Argumen kedua menyediakan model format. Model format dapat terdiri dari satu atau lebih elemen format. Misalnya, DY adalah elemen format, seperti DD , MONTH , dll.

Lihat Daftar Lengkap Elemen Format Datetime ini di Oracle untuk daftar elemen format yang dapat digunakan untuk memformat nilai datetime dengan fungsi ini.

Format Default

Jika Anda menghilangkan fmt argumen, hasilnya akan dikonversi sebagai berikut:

  • DATE nilai dikonversi ke nilai dalam format tanggal default.
  • TIMESTAMP dan TIMESTAMP WITH LOCAL TIME ZONE nilai dikonversi ke nilai dalam format stempel waktu default.
  • TIMESTAMP WITH TIME ZONE nilai dikonversi ke nilai dalam stempel waktu default dengan format zona waktu.
  • Nilai interval dikonversi ke representasi numerik literal interval.

Berikut ini contoh konversi DATE nilai tanpa menentukan format:

SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;

Hasil:

26/SEP/35

Dalam hal ini, format tanggal default sesi saya adalah DD/MON/RR , dan hasilnya mencerminkan itu. Saya tahu bahwa ini adalah format tanggal default sesi saya karena saya menanyakan V$NLS_PARAMETERS view, yang menunjukkan nilai parameter NLS saat ini.

Lihat Cara Memeriksa Nilai Parameter NLS jika Anda perlu memeriksanya.

Lihat juga Cara Mengubah Format Tanggal Sesi Anda jika Anda ingin mengubah format tanggal waktu default untuk sesi Anda saat ini.

Interval

Berikut adalah contoh yang menampilkan nilai interval dalam format default:

SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;

Hasil:

+25-02

'nlsparam' Argumen

'nlsparam' argumen menentukan bahasa di mana nama bulan dan hari dan singkatan dikembalikan. Argumen ini dapat memiliki bentuk berikut:

'NLS_DATE_LANGUAGE = language'

Contoh:

SELECT 
    TO_CHAR(
        DATE '2035-09-26', 
        'DY, DD MONTH YYYY',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

Hasil:

MIÉ, 26 SEPTIEMBRE 2035

Argumen Null

Melewati null menghasilkan null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Hasil:

null

Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null terjadi sebagai akibat dari SQL SELECT penyataan.

Namun, Anda dapat menggunakan SET NULL untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null harus dikembalikan.

Argumen Tidak Ada

Memanggil fungsi tanpa meneruskan argumen apa pun, menghasilkan kesalahan:

SELECT TO_CHAR()
FROM DUAL;

Hasil:

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:

Melewati terlalu banyak argumen juga menyebabkan kesalahan:

SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;

Hasil:

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. Solusi untuk tidak dapat melakukan operasi DML di dalam kueri?

  2. MySQL 'buat skema' dan 'buat database' - Apakah ada perbedaan?

  3. Pengantar Koleksi PL/SQL Di Database Oracle

  4. PLSQL JDBC:Bagaimana cara mendapatkan ID baris terakhir?

  5. Cara mengembalikan patch setelah fase cutover gagal di R12.2