Di Oracle Database, TO_CHAR(number)
fungsi mengonversi angka menjadi VARCHAR2
nilai dalam format yang ditentukan oleh argumen format.
Sintaks
Sintaksnya seperti ini:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Dimana:
n
bisa berupaNUMBER
,BINARY_FLOAT
, atauBINARY_DOUBLE
.fmt
adalah model format opsional yang menentukan bagaimana hasil harus diformat. Lihat elemen format angka yang valid yang dapat digunakan untuk menyusun model format Anda.'nlsparam'
adalah argumen opsional yang menentukan bagaimana berbagai karakter dikembalikan. Anda dapat menggunakannya untuk menentukan karakter desimal dan pemisah grup, simbol mata uang lokal, dan simbol mata uang internasional. Jika argumen ini dihilangkan, maka nilai default untuk sesi saat ini akan digunakan.
Contoh
Berikut ini contoh untuk mendemonstrasikan cara kerja fungsi:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Hasil:
RESULT __________ 12,345
Argumen pertama adalah angka aktual yang kita format, dan argumen kedua adalah model format. Model format menentukan bagaimana nomor diformat.
Dalam hal ini, model format kami memformat angka dengan pemisah grup di posisi yang sesuai. Setiap digit numerik diwakili oleh 9
, dan pemisah grup diwakili oleh G
.
Inilah yang terjadi jika kita mengubah model format sedikit:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Hasil:
RESULT ___________ 012,345
Dalam hal ini, kami memulai model format dengan 0
karakter. Ini mengembalikan nol terkemuka di mana pun berlaku. 9
karakter tidak mengembalikan angka nol di depan.
Bahkan, kita bisa mengganti semua 9
s dengan 0
s jika kita mau. Berikut perbandingan yang menunjukkan bagaimana hasilnya bisa sangat berbeda, tergantung pada elemen format yang Anda gunakan:
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Hasil:
000G000 999G999 ___________ ___________ 000,012 12
Simbol Mata Uang
Anda dapat menggunakan L
elemen format untuk mengembalikan simbol mata uang lokal.
Contoh:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Hasil:
RESULT _______________________ $12,345.00
Contoh ini menggunakan model format yang menampilkan hasil menggunakan simbol mata uang lokal (diwakili oleh L
), pemisah grup (diwakili oleh G
), karakter desimal (diwakili oleh D
), dan tentu saja, setiap digit angka (diwakili oleh 9
).
Simbol mata uang lokal ditentukan oleh nilai saat ini dari NLS_CURRENCY
parameter. Memang benar kita bisa menggunakan tanda dolar ($
) untuk simbol mata uang, tetapi itu mengasumsikan bahwa mata uang tersebut didenominasi dalam dolar. Ada banyak kemungkinan mata uang lain di seluruh dunia, dan L
elemen format dapat secara dinamis mengembalikan simbol mata uang lokal untuk sesi pengguna.
Lihat Cara Memeriksa Nilai Parameter NLS jika Anda perlu memeriksanya.
Lihat Daftar Lengkap Elemen Format Angka di Oracle untuk daftar elemen format yang dapat digunakan untuk memformat angka dengan fungsi ini.
Format Default
Jika Anda menghilangkan fmt
argumen, nomor diubah menjadi VARCHAR2
nilai yang cukup panjang untuk menampung angka signifikannya.
Berikut ini contoh pengonversian angka tanpa menentukan formatnya:
SELECT TO_CHAR(525.45)
FROM DUAL;
Hasil:
525.45
'nlsparam'
Argumen
'nlsparam'
argumen dapat digunakan untuk menentukan karakter desimal dan pemisah grup, simbol mata uang lokal, dan simbol mata uang internasional.
Bentuknya sebagai berikut:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
Contoh:
SELECT
TO_CHAR(
1234.56,
'L99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Hasil:
€1.234,56
Ini dia lagi, tapi kali ini saya ganti L
dengan C
dalam model format:
SELECT
TO_CHAR(
1234.56,
'C99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Hasil:
EUR1.234,56
C
mengembalikan simbol mata uang ISO, yang dalam hal ini adalah EUR
.
Cara Menekan Padding
Anda mungkin telah memperhatikan bahwa beberapa contoh memiliki padding yang diterapkan di sebelah kiri hasil. Padding tersebut dapat dihapus dengan fm
pengubah format.
Contoh:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Hasil:
€1.234,56
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:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Melewati terlalu banyak argumen juga menyebabkan kesalahan:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
Hasil:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"