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

Chuyển đổi ‘datetimeoffset’ thành ‘smalldatetime’ trong SQL Server (Ví dụ T-SQL)

Bài viết này chứa các ví dụ về chuyển đổi bộ datetimeoffs giá trị thành smalldatetime trong SQL Server.

Khi bạn chuyển đổi bộ datetimeoffs giá trị thành smalldatetime , ngày và giờ được sao chép. Phút được làm tròn lên (tùy thuộc vào giá trị giây) và giây được đặt thành 0.

datetimeoffset kiểu dữ liệu cho phép bạn chỉ định độ chính xác từng phần giây từ 0 đến 7. Điều này được thực hiện bằng cách sử dụng datetimeoffset(n) cú pháp. Nếu bạn không chỉ định điều này, nó sẽ sử dụng 7 (mặc định). Nó cũng có độ lệch múi giờ. Kích thước lưu trữ của loại dữ liệu này là 8, 9 hoặc 10 byte (cộng thêm 1 byte cho độ chính xác), tùy thuộc vào độ chính xác đang được sử dụng.

smalldatetime Mặt khác, loại dữ liệu không có nhận thức về múi giờ và do đó, nó không bao gồm bất kỳ chênh lệch múi giờ nào. Nó cũng không có giây phân số nào và thành phần giây của nó luôn được đặt thành 0 (:00). Độ chính xác của nó chính xác đến từng phút. Kích thước bộ nhớ của loại dữ liệu này được cố định ở 4 byte.

Ví dụ 1 - Chuyển đổi ngầm định

Dưới đây là một ví dụ về chuyển đổi ngầm giữa datetimeoffset smalldatetime .

 DECLARE @thedatetimeoffset datetimeoffset, @thesmalldatetime smalldatetime; SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00'; SET @thesmalldatetime =@thedatetimeoffset; SELECT @thedatetimeoffset AS 'datetimeoffset AS' datetimeoffset AS ' NHƯ 'smalldatetime'; 

Kết quả:

 + ------------------------------------ + --------- ------------ + | datetimeoffset | smalldatetime || ------------------------------------ + ---------- ----------- || 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | + ------------------------------------ + - -------------------- + 

Đây là một chuyển đổi ngầm định bởi vì chúng tôi không sử dụng một hàm chuyển đổi (như những hàm bên dưới) để chuyển đổi nó một cách rõ ràng. Trong trường hợp này, SQL Server thực hiện một chuyển đổi ẩn đằng sau hậu trường khi chúng tôi cố gắng gán datetimeoffset giá trị thành smalldatetime biến.

Chúng ta có thể thấy rằng smalldatetime biến không có độ chính xác giây phân số và số giây của nó đã được đặt thành 0. Ngoài ra, phút đã được làm tròn, do giá trị ban đầu có giá trị giây là 30.

Một quan sát khác là độ lệch múi giờ đã bị cắt ngắn - smalldatetime kiểu dữ liệu không có nhận biết múi giờ.

Trong chuyển đổi này, kích thước bộ nhớ đã giảm từ 10 byte (11 byte khi bạn đếm độ chính xác) cho datetimeoffset , thành 4 byte cho smalldatetime .

Ví dụ 2 - Chuyển đổi rõ ràng bằng CAST ()

Dưới đây là một ví dụ về chuyển đổi rõ ràng. Trong trường hợp này, tôi sử dụng CAST() hoạt động trực tiếp trong SELECT tuyên bố để chuyển đổi rõ ràng giữa datetimeoffset smalldatetime .

 DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00'; CHỌN @thedatetimeoffset AS 'datetimeoffset', CAST (@thedatetimeoffset AS smalldatetime) AS ' 

Kết quả:

 + ------------------------------------ + --------- ---------------- + | datetimeoffset | smalldatetime || ------------------------------------ + ---------- --------------- || 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | + ------------------------------------ + - ------------------------ + 

Ví dụ 3 - Chuyển đổi rõ ràng bằng CONVERT ()

Dưới đây là một ví dụ về chuyển đổi rõ ràng bằng cách sử dụng CONVERT() hàm thay vì CAST() .

 DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00'; SELECT @thedatetimeoffset AS 'datetimeoffset', CONVERT (smalldatetime, @thedatetimeoffset) AS ';  

Kết quả:

 + ------------------------------------ + --------- ---------------- + | datetimeoffset | smalldatetime || ------------------------------------ + ---------- --------------- || 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | + ------------------------------------ + - ------------------------ + 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng NEWID () để tạo giá trị duy nhất trong SQL Server

  2. Cách thanh lịch nhất để tạo hoán vị trong máy chủ SQL

  3. Giải thích về ANSI_NULLS của Máy chủ SQL

  4. Đích đến của máy chủ SQL so với Đích của OLE DB

  5. Nhật ký giao dịch SQL Server, Phần 2:Kiến trúc nhật ký