Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

cách tốt nhất để chuyển đổi và xác thực chuỗi ngày

Trước hết, vì bạn đang sử dụng SQL Server 2005, bạn nên đặt mã của mình có thể fail vào BEGIN TRY.....END TRY BEGIN CATCH....END CATCH khối - thử / bắt khối cho T-SQL!

Thứ hai, đối với tất cả thao tác ngày tháng, tôi luôn luôn sử dụng định dạng ISO-8601 sẽ hoạt động bất kể định dạng ngày hiện tại được đặt trong SQL Server.

Định dạng ISO-8601 là YYYYMMDD chỉ cho ngày tháng hoặc YYYY-MM-DDTHH:MM:SS cho ngày tháng - vì vậy tôi sẽ viết mã của bạn là:

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

Không dựa vào bất kỳ định dạng ngày cụ thể nào đang được đặt !! Gửi cho tôi mã của bạn và tôi sẽ thử nó trên hệ thống Thụy Sĩ-Đức - tôi gần như đảm bảo rằng nó sẽ bị hỏng nếu bạn mù quáng cho rằng "en-US" và do đó "mm / dd / yyyy" - nó không cùng một bối cảnh ở mọi nơi trên hành tinh này.

Thật không may, SQL Server xử lý ngày tháng khá yếu - có thể đó có thể là một điểm mở rộng mà việc sử dụng cụm CLR bên trong SQL Server sẽ có ý nghĩa, để khai thác các chức năng xử lý ngày tháng phong phú hơn nhiều trong .NET ??

Marc

Tái bút:có vẻ như định dạng ISO-8601 mà tôi biết YYYY-MM-DD không phải lúc nào cũng hoạt động trong SQL Server - trái ngược với những gì Books Online dường như đã rao giảng. Thay vào đó, hãy sử dụng YYYYMMDD hoặc YYYY-MM-DDTHH:MM:SS.
Cảm ơn, 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. Cách sửa lỗi "dateiff function dẫn đến lỗi tràn" trong SQL Server

  2. Các loại con trỏ máy chủ SQL - Con trỏ KEYSET | Hướng dẫn sử dụng SQL Server / TSQL

  3. Làm cách nào tôi có thể sao chép cơ sở dữ liệu SQL Server trên cùng một máy chủ trong SQL Server 2008 Express?

  4. Tạo mã sql theo lập trình

  5. Các phương pháp hay nhất về khôi phục sau thảm họa của Microsoft SQL Server