Fungsi CAST - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fungsi CAST

Fungsi CAST mengubah satu tipe data ke tipe data lain yang kompatibel. Misalnya, Anda dapat mengonversi string ke tanggal, atau tipe numerik menjadi string. CAST melakukan konversi runtime, yang berarti konversi tidak mengubah tipe data nilai dalam tabel sumber. Itu hanya berubah dalam konteks kueri.

Fungsi CAST sangat mirip denganFungsi CONVERT, karena keduanya mengonversi satu tipe data ke tipe data lainnya, tetapi mereka disebut berbeda.

Tipe data tertentu memerlukan konversi eksplisit ke tipe data lain menggunakan fungsi CAST atau CONVERT. Tipe data lain dapat dikonversi secara implisit, sebagai bagian dari perintah lain, tanpa menggunakan CAST atau CONVERT. Lihat Ketik kompatibilitas dan konversi.

Sintaks

Gunakan salah satu dari dua bentuk sintaks yang setara ini untuk mentransmisikan ekspresi dari satu tipe data ke tipe data lainnya.

CAST ( expression AS type ) expression :: type

Argumen

ekspresi

Ekspresi yang mengevaluasi satu atau lebih nilai, seperti nama kolom atau literal. Mengonversi nilai null mengembalikan nol. Ekspresi tidak dapat berisi string kosong atau kosong.

jenis

Salah satu yang didukungJenis data.

Jenis pengembalian

CAST mengembalikan tipe data yang ditentukan oleh argumen tipe.

catatan

Amazon Redshift mengembalikan kesalahan jika Anda mencoba melakukan konversi bermasalah, seperti konversi DECIMAL yang kehilangan presisi, seperti berikut ini:

select 123.456::decimal(2,1);

atau konversi INTEGER yang menyebabkan overflow:

select 12345678::smallint;

Contoh

Beberapa contoh menggunakan database TICKIT sampel. Untuk informasi selengkapnya tentang menyiapkan data sampel, lihat Memuat data.

Dua pertanyaan berikut adalah setara. Keduanya memberikan nilai desimal ke bilangan bulat:

select cast(pricepaid as integer) from sales where salesid=100; pricepaid ----------- 162 (1 row)
select pricepaid::integer from sales where salesid=100; pricepaid ----------- 162 (1 row)

Berikut ini menghasilkan hasil yang serupa. Tidak memerlukan data sampel untuk dijalankan:

select cast(162.00 as integer) as pricepaid; pricepaid ----------- 162 (1 row)

Dalam contoh ini, nilai dalam kolom stempel waktu dilemparkan sebagai tanggal, yang mengakibatkan penghapusan waktu dari setiap hasil:

select cast(saletime as date), salesid from sales order by salesid limit 10; saletime | salesid -----------+--------- 2008-02-18 | 1 2008-06-06 | 2 2008-06-06 | 3 2008-06-09 | 4 2008-08-31 | 5 2008-07-16 | 6 2008-06-26 | 7 2008-07-10 | 8 2008-07-22 | 9 2008-08-06 | 10 (10 rows)

Jika Anda tidak menggunakan CAST seperti yang diilustrasikan dalam sampel sebelumnya, hasilnya akan mencakup waktu: 2008-02-18 02:36:48.

Kueri berikut melemparkan data karakter variabel ke tanggal. Tidak memerlukan data sampel untuk dijalankan.

select cast('2008-02-18 02:36:48' as date) as mysaletime; mysaletime -------------------- 2008-02-18 (1 row)

Dalam contoh ini, nilai dalam kolom tanggal dilemparkan sebagai stempel waktu:

select cast(caldate as timestamp), dateid from date order by dateid limit 10; caldate | dateid --------------------+-------- 2008-01-01 00:00:00 | 1827 2008-01-02 00:00:00 | 1828 2008-01-03 00:00:00 | 1829 2008-01-04 00:00:00 | 1830 2008-01-05 00:00:00 | 1831 2008-01-06 00:00:00 | 1832 2008-01-07 00:00:00 | 1833 2008-01-08 00:00:00 | 1834 2008-01-09 00:00:00 | 1835 2008-01-10 00:00:00 | 1836 (10 rows)

Dalam kasus seperti sampel sebelumnya, Anda dapat memperoleh kontrol tambahan atas pemformatan output dengan menggunakan TO_CHAR.

Dalam contoh ini, bilangan bulat dilemparkan sebagai string karakter:

select cast(2008 as char(4)); bpchar -------- 2008

Dalam contoh ini, nilai DECIMAL (6,3) dilemparkan sebagai nilai DECIMAL (4,1):

select cast(109.652 as decimal(4,1)); numeric --------- 109.7

Contoh ini menunjukkan ekspresi yang lebih kompleks. Kolom PRICEPAID (kolom DECIMAL (8,2)) dalam tabel PENJUALAN dikonversi ke kolom DECIMAL (38,2) dan nilainya dikalikan dengan 100000000000000000000:

select salesid, pricepaid::decimal(38,2)*100000000000000000000 as value from sales where salesid<10 order by salesid; salesid | value ---------+---------------------------- 1 | 72800000000000000000000.00 2 | 7600000000000000000000.00 3 | 35000000000000000000000.00 4 | 17500000000000000000000.00 5 | 15400000000000000000000.00 6 | 39400000000000000000000.00 7 | 78800000000000000000000.00 8 | 19700000000000000000000.00 9 | 59100000000000000000000.00 (9 rows)
catatan

Anda tidak dapat melakukan operasi CAST atau CONVERT pada tipe GEOMETRY data untuk mengubahnya ke tipe data lain. Namun, Anda dapat memberikan representasi heksadesimal dari string literal dalam format biner terkenal (EWKB) yang diperluas sebagai masukan ke fungsi yang menerima argumen. GEOMETRY Misalnya, ST_AsText fungsi berikut mengharapkan tipe GEOMETRY data.

SELECT ST_AsText('01010000000000000000001C400000000000002040');
st_astext ------------ POINT(7 8)

Anda juga dapat secara eksplisit menentukan tipe GEOMETRY data.

SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
st_astext ------------ POINT(5 6)