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

Chuyển đổi không thành công khi chuyển đổi ngày và / hoặc giờ từ chuỗi ký tự trong khi chèn ngày giờ

Có nhiều định dạng được SQL Server hỗ trợ - xem Sách MSDN Trực tuyến về CAST và CONVERT. Hầu hết các định dạng đó đều phụ thuộc về những cài đặt bạn có - do đó, những cài đặt này đôi khi có thể hoạt động - và đôi khi không.

Cách giải quyết vấn đề này là sử dụng định dạng ngày ISO-8601 (được điều chỉnh một chút) được SQL Server hỗ trợ - định dạng này luôn hoạt động luôn - bất kể cài đặt định dạng ngày và ngôn ngữ SQL Server của bạn.

Định dạng ISO-8601 được SQL Server hỗ trợ có hai loại:

  • YYYYMMDD chỉ cho ngày tháng (không có phần thời gian); lưu ý ở đây: không có dấu gạch ngang! , điều đó rất quan trọng! YYYY-MM-DD KHÔNG độc lập với cài đặt định dạng ngày trong SQL Server của bạn và sẽ KHÔNG hoạt động trong mọi tình huống!

hoặc:

  • YYYY-MM-DDTHH:MM:SS cho ngày và giờ - lưu ý ở đây:định dạng này dấu gạch ngang (nhưng chúng có thể được bỏ qua) và một T cố định làm dấu phân cách giữa phần ngày và giờ trong DATETIME của bạn .

Điều này hợp lệ cho SQL Server 2000 và mới hơn.

Vì vậy, trong trường hợp cụ thể của bạn - hãy sử dụng các chuỗi sau:

insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');

và bạn sẽ ổn (lưu ý:bạn cần sử dụng quốc tế 24 giờ thay vì định dạng SA / CH 12 giờ cho việc này).

Ngoài ra :nếu bạn đang sử dụng SQL Server 2008 hoặc mới hơn, bạn cũng có thể sử dụng DATETIME2 kiểu dữ liệu (thay vì DATETIME đơn giản ) và INSERT hiện tại của bạn sẽ chỉ hoạt động mà không có bất kỳ vấn đề! :-) DATETIME2 tốt hơn rất nhiều và ít kén chọn chuyển đổi hơn - và dù sao thì đó cũng là kiểu dữ liệu ngày / giờ được đề xuất cho SQL Server 2008 hoặc mới hơn.

SELECT
   CAST('02-21-2012 6:10:00 PM' AS DATETIME2),     -- works just fine
   CAST('01-01-2012 12:00:00 AM' AS DATETIME2)   -- works just fine  

Đừng hỏi tôi tại sao toàn bộ chủ đề này rất phức tạp và hơi khó hiểu - đó chỉ là cách của nó. Nhưng với YYYYMMDD , bạn sẽ ổn đối với bất kỳ phiên bản SQL Server nào và đối với bất kỳ cài đặt ngôn ngữ và định dạng ngày tháng nào trong SQL Server của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để loại trừ Ngày cuối tuần trong truy vấn SQL Server?

  2. Thêm giá trị mặc định của trường datetime trong SQL Server vào dấu thời gian

  3. 5 tài nguyên tuyệt vời giúp bạn phát huy vai trò giám sát cơ sở dữ liệu của mình

  4. Có "HOẶC" trong điều kiện INNER JOIN có phải là một ý tưởng tồi không?

  5. Tôi nhận được Một nỗ lực đã được thực hiện để tải một chương trình có lỗi định dạng không chính xác trên một dự án sao chép SQL Server