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

Cara Mengubah Format Tanggal di Sesi Oracle Anda

Saat bekerja dengan fungsi yang mengembalikan tanggal, Oracle Database mengembalikan tanggal ini berdasarkan nilai NLS_DATE_FORMAT parameter.

Ada juga NLS_TIMESTAMP_FORMAT parameter dan NLS_TIMESTAMP_TZ_FORMAT parameter, keduanya memiliki topeng format datetime yang dapat ditentukan secara terpisah.

Semua parameter ini memiliki nilai default yang diturunkan dari NLS_TERRITORY parameter (yang secara default, bergantung pada sistem operasi).

Jadi, untuk mengubah format tanggal sesi, Anda dapat memperbarui NLS_TERRITORY parameter, atau secara eksplisit memperbarui setiap parameter satu per satu.

Artikel ini memberikan contoh pemeriksaan dan perubahan nilai ini, serta melihat hasilnya.

Periksa Pengaturan Awal

Pertama, mari periksa setelan saya saat ini untuk NLS_DATE_FORMAT parameter:

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Hasil:

                 PARAMETER                             VALUE 
__________________________ _________________________________ 
NLS_TERRITORY              AUSTRALIA                         
NLS_DATE_FORMAT            DD/MON/RR                         
NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    

Nilai NLS_TERRITORY saya parameternya adalah AUSTRALIA , dan karenanya berbagai parameter datetime menggunakan model format default untuk Australia.

Nilai ini mempengaruhi bagaimana tanggal diformat saat kita menggunakan fungsi tertentu. Misalnya, berikut adalah contoh penggunaan SYSDATE untuk mengembalikan tanggal saat ini:

SELECT SYSDATE
FROM DUAL;

Hasil:

04/AUG/21

Ubah Pengaturan

Kita dapat menggunakan ALTER SESSION pernyataan untuk mengubah pengaturan parameter ini.

Kami memiliki opsi untuk mengubah setiap parameter ini satu per satu, atau mengubah NLS_TERRITORY parameter, yang secara otomatis memperbarui setiap parameter tersebut secara implisit.

Ubah NLS_TERRITORY Parameter

Berikut ini contoh mengubah NLS_TERRITORY parameter:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';

Hasil:

Session altered.

Mari kita periksa nilai barunya:

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Hasil:

                 PARAMETER                           VALUE 
__________________________ _______________________________ 
NLS_TERRITORY              AMERICA                         
NLS_DATE_FORMAT            DD-MON-RR                       
NLS_TIMESTAMP_FORMAT       DD-MON-RR HH.MI.SSXFF AM        
NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZR    

Jadi kita dapat melihat bahwa, tidak hanya wilayah yang diperbarui, berbagai parameter datetime juga telah diperbarui.

Ubah Hanya NLS_DATE_FORMAT Parameter

Berikut ini contoh memperbarui NLS_DATE_FORMAT parameter:

ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';

Hasil:

Session altered.

Mari kita periksa nilai barunya:

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    );

Hasil:

                 PARAMETER                           VALUE 
__________________________ _______________________________ 
NLS_TERRITORY              AMERICA                         
NLS_DATE_FORMAT            rr-mm-dd                        
NLS_TIMESTAMP_FORMAT       DD-MON-RR HH.MI.SSXFF AM        
NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZR    

Seperti yang diharapkan, hanya NLS_DATE_FORMAT parameter telah diubah ke format baru. Yang lainnya tetap tidak berubah.

Sekarang ketika kita menjalankan SYSDATE , tanggal dikembalikan dalam format baru kami, tetapi SYSTIMESTAMP mengembalikannya menggunakan NLS_TIMESTAMP_TZ_FORMAT format, yang tidak berubah:

SELECT 
    SYSDATE,
    SYSTIMESTAMP
FROM DUAL;

Hasil:

    SYSDATE                              SYSTIMESTAMP 
___________ _________________________________________ 
21-08-09    09-AUG-21 07.22.35.402453000 PM -04:00   

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan konstanta paket dalam pernyataan SQL SELECT?

  2. Bagaimana cara mengonversi teks menjadi angka secara efisien di Oracle PL/SQL dengan NLS_NUMERIC_CHARACTERS non-default?

  3. Bagaimana cara menghitung rata-rata kolom dan kemudian memasukkannya ke dalam kueri pemilihan di Oracle?

  4. Bagaimana cara memuat sejumlah besar string agar sesuai dengan database Oracle?

  5. Menghubungkan ke database Oracle menggunakan SQLAlchemy