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

Chuyển đổi ngày và văn hóa:Sự khác biệt giữa DATE và DATETIME

ISO-8601 cho DATETIME (loại cũ hơn) bằng cách nào đó "bị hỏng" hoặc "được điều chỉnh" (tùy thuộc vào việc bạn xem nó như một lỗi hay một tính năng) - bạn cần sử dụng YYYYMMDD ( không có bất kỳ dấu gạch ngang nào) để làm cho nó hoạt động bất kể cài đặt ngôn ngữ.

Cho DATE hoặc DATETIME2(n) kiểu dữ liệu, điều này đã được sửa và định dạng ISO-8601 "thích hợp" YYYY-MM-DD sẽ luôn được diễn giải một cách chính xác.

-- OK because of "adapted" ISO-8601
SET LANGUAGE GERMAN;
DECLARE @dt DATETIME='20170113'; 

SELECT @dt;

SELECT CAST('20170113' AS DATETIME);
SELECT CONVERT(DATETIME, '20170113'); 

-- OK because of DATETIME2(n)
SET LANGUAGE GERMAN;
DECLARE @dt2 DATETIME2(0) = '2017-01-13'; 

SELECT @dt2;

SELECT CAST('2017-01-13' AS DATETIME2(0));
SELECT CONVERT(DATETIME2(0), '2017-01-13'); 

Đó là một điều kỳ quặc của DATETIME nhập (và không phải là duy nhất ....) - chỉ cần đăng ký, biết về nó - và tiếp tục (nghĩa là:không sử dụng DATETIME nữa - sử dụng DATE hoặc DATETIME2(n) thay vào đó - tốt hơn nhiều để làm việc với!) :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhà cung cấp Microsoft OLE DB cho SQL Server có hỗ trợ TLS 1.2 không

  2. CONVERT () trong SQL Server

  3. 3 cách trả về hàng chứa ký tự chữ và số trong SQL Server

  4. Cách bật tính năng ghi dữ liệu thay đổi (CDC) trên toàn bộ bảng HOẶC bật CDC trên bảng có danh sách cột trong SQL Server

  5. Bản xem trước công khai đầu tiên của SQL Server 2019:CTP 2.0