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

Mengapa TAHUN gagal dengan kesalahan konversi dari Tanggal?

Saya berasumsi bahwa RValues adalah kolom string dari beberapa jenis, untuk beberapa alasan. Anda harus memperbaikinya dan menyimpan data tanggal menggunakan tipe data tanggal (jelas di kolom terpisah dari tas campuran ini).

Jika Anda tidak dapat memperbaikinya, maka Anda dapat mencegah apa yang dijelaskan Damien di atas dengan:

CASE WHEN ISDATE(RValues) = 1 THEN CONVERT(Date, RValues) END AS FechaFirma 

(Yang akan membuat "tanggal" NULL jika SQL Server tidak tahu cara mengubahnya menjadi tanggal.)

Anda tidak dapat mencegahnya hanya dengan menambahkan WHERE klausa, karena SQL Server akan sering mencoba untuk mencoba konversi di SELECT daftar sebelum melakukan filter (semua tergantung pada rencana). Anda juga tidak dapat memaksakan urutan operasi dengan menggunakan subquery, CTE, petunjuk urutan bergabung, dll. Ada item Connect terbuka tentang masalah ini - mereka "menyadarinya" dan "berharap untuk mengatasinya di versi mendatang ."

Singkat dari ekspresi CASE, yang memaksa SQL Server untuk mengevaluasi hasil ISDATE() sebelum mencoba mengonversi (selama tidak ada agregat di salah satu cabang ), Anda dapat:

  • buang hasil yang difilter ke tabel #temp, lalu pilih dari tabel #temp itu, dan hanya terapkan konversi saat itu.
  • kembalikan saja string tersebut, dan perlakukan sebagai tanggal pada klien, dan tarik bagian TAHUN/BULAN dll. dari sana
  • gunakan manipulasi string untuk menarik YEAR =LEFT(col,4) dll.
  • gunakan TRY_CONVERT() karena saya baru tahu Anda menggunakan SQL Server 2012:

    TRY_CONVERT(DATE, RValues) AS FechaFirma
    



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Karakter aneh yang menampilkan tabel kecil setelah menggunakan tableDiff

  2. Cara Mendeteksi jika Nilai Berisi Setidaknya Satu Nomor di SQL Server

  3. Perbedaan antara Transaksi Implisit dan Eksplisit

  4. Pengkodean karakter default SQL Server

  5. Cara Menghapus File Data dari Database SQL Server (T-SQL)