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

cara terbaik untuk mengonversi dan memvalidasi string tanggal

Pertama-tama, karena Anda menggunakan SQL Server 2005, Anda harus meletakkan kode yang mungkin gagal ke BEGIN TRY.....END TRY BEGIN CATCH....END CATCH blok - coba/tangkap blok untuk T-SQL!

Kedua, untuk semua manipulasi tanggal, saya akan selalu gunakan format ISO-8601 yang akan berfungsi terlepas dari format tanggal saat ini yang diatur di SQL Server.

Format ISO-8601 adalah YYYYMMDD hanya untuk tanggal, atau YYYY-MM-DDTHH:MM:SS untuk tanggal dengan waktu - jadi saya akan menulis kode Anda sebagai:

BEGIN TRY
  SET @Source='07152009'
  SET @Temp = RIGHT(@Source, 4) +             -- YYYY
              LEFT(@Source, 2) +              -- MM
              SUBSTRING(@Source, 3, 2)        -- DD

  IF ISDATE(@Temp)!=1
  BEGIN
      RAISERROR('ERROR, invalid date',16,1)
  END

  SET @Destination = CAST(@Temp AS DATETIME)
END TRY
BEGIN CATCH
      -- handle error if something bombs out
END CATCH

Jangan bergantung pada format tanggal tertentu yang sedang diatur!! Kirimi saya kode Anda dan saya akan mencobanya pada sistem Swiss-Jerman - saya hampir menjamin itu akan rusak jika Anda secara membabi buta menganggap "en-US" dan dengan demikian "mm/dd/yyyy" - itu tidak pengaturan yang sama di mana-mana di planet ini.

Sayangnya SQL Server agak lemah menangani tanggal - mungkin itu mungkin titik ekstensi di mana menggunakan perakitan CLR di dalam SQL Server akan masuk akal, untuk memanfaatkan fungsi penanganan tanggal yang jauh lebih kaya di .NET ??

Marc

PS:sepertinya format ISO-8601 yang saya tahu YYYY-MM-DD tidak selalu berfungsi di SQL Server - bertentangan dengan apa yang sepertinya diberitakan oleh Books Online. Gunakan YYYYMMDD atau YYYY-MM-DDTHH:MM:SS sebagai gantinya.
Terima kasih, gbn!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan SQL untuk menemukan gaji tertinggi ke-N dari tabel gaji

  2. Gunakan APP_NAME() untuk Mendapatkan Nama Aplikasi dari Sesi Saat Ini di SQL Server

  3. Bagaimana cara melewatkan daftar sebagai parameter dalam prosedur tersimpan?

  4. Apakah Mengakhiri Penggunaan menutup Koneksi SQL yang terbuka

  5. Tambahkan Akun Email Database ke Profil (SSMS)