Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

PARSE() vs TRY_PARSE() di SQL Server:Apa Bedanya?

Di SQL Server, PARSE() dan TRY_PARSE() fungsi yang digunakan untuk menerjemahkan nilai ke tipe data lain. Mereka pada dasarnya melakukan hal yang sama, dengan satu pengecualian; bagaimana mereka menangani kesalahan.

Jika PARSE() gagal saat mencoba mengurai ke tipe data yang berbeda, itu akan mengembalikan kesalahan. Jika TRY_PARSE() gagal, itu akan mengembalikan NULL .

Contoh 1 – Pertama, Kesamaan

Berikut adalah contoh yang menunjukkan bagaimana kedua fungsi mengembalikan hasil yang sama ketika mereka berhasil mengurai nilai ke tipe data yang diperlukan:

SELECT 
    PARSE('Fri, 8 June 2018' AS date) AS PARSE,
    PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;

Hasil:

+------------+-------------+
| PARSE      | TRY_PARSE   |
|------------+-------------|
| 2018-06-08 | 2018-06-08  |
+------------+-------------+

Seperti yang diharapkan, keduanya memberikan hasil yang sama persis.

Tapi mari kita lihat apa yang terjadi ketika mereka tidak dapat mengurai nilai ke tipe data yang diperlukan.

Contoh 2 – Ketika PARSE() Gagal

Berikut adalah contoh yang terjadi saat PARSE() tidak dapat mengurai nilai ke nilai lain:

SELECT PARSE('Next year' AS date) AS Result;

Hasil:

Error converting string value 'Next year' into data type date using culture ''. 

Operasi gagal karena saya tidak memberikan representasi yang valid dari tipe data yang diminta. Dengan kata lain, PARSE() tidak dapat mengonversi Next year menjadi tanggal tipe data seperti yang diminta.

Contoh 3 – Ketika TRY_PARSE() Gagal

Berikut ini contoh saat kami mencoba mengurai nilai yang sama dengan TRY_PARSE() :

SELECT TRY_PARSE('Next year' AS date) AS Result;

Hasil:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Penguraian masih gagal, tetapi mengembalikan NULL bukannya error.

Contoh 4 – Menggunakan TRY_PARSE() dengan Pernyataan Bersyarat

Kita dapat mengambil TRY_PARSE() dan menguji nilai pengembaliannya. Jika itu adalah nilai NULL, kami dapat mengembalikan satu hal, jika itu bukan nilai NULL, kami dapat mengembalikan yang lain:

SELECT 
    CASE WHEN TRY_PARSE('Next year' AS date) IS NULL
        THEN 'Conversion failed'
        ELSE 'Conversion succeeded'
    END
AS Result;

Hasil:

+-------------------+
| Result            |
|-------------------|
| Conversion failed |
+-------------------+

Contoh 5 – TRY_PARSE() Dengan Kesalahan

Hanya karena TRY_PARSE() tidak menghasilkan kesalahan pada contoh di atas, bukan berarti tidak pernah menghasilkan kesalahan. Ada kalanya Anda masih bisa mendapatkan kesalahan saat menggunakan fungsi ini.

Misalnya, Anda akan mendapatkan kesalahan jika Anda memberikan nilai yang tidak valid sebagai culture argumen:

SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;

Hasil:

The culture parameter 'Mars' provided in the function call is not supported. 

Beberapa Catatan tentang Fungsi ini

Berikut adalah beberapa poin yang Microsoft katakan tentang fungsi-fungsi ini:

  • Sebaiknya Anda menggunakan PARSE() dan TRY_PARSE() hanya untuk mengonversi dari string ke tipe tanggal/waktu dan angka. Untuk tipe data lainnya, gunakan CAST() atau CONVERT() .
  • Fungsi ini bergantung pada keberadaan .NET Framework Common Language Runtime (CLR).
  • Ada overhead kinerja tertentu dalam mengurai nilai string.
  • Fungsi ini tidak akan diremote karena bergantung pada keberadaan CLR. Mencoba melakukan remote fungsi yang memerlukan CLR akan menyebabkan kesalahan pada server jarak jauh.

  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 saya bisa menjadwalkan pekerjaan untuk menjalankan kueri SQL setiap hari?

  2. Tidak dapat mengecilkan basis data 'hanya baca' | Kecilkan Log Transaksi Saat Menggunakan Grup Ketersediaan AlwaysOn

  3. Bagaimana cara memeriksa apakah ada kolom di tabel SQL Server?

  4. Hindari Penamaan User Stored Procedures SP% atau SP_%

  5. Dapatkan Hari Tahun Ini dari Tanggal di SQL Server (T-SQL)