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

Chuyển đổi ‘datetime2’ 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 datetime2 giá trị thành smalldatetime giá trị trong SQL Server.

Một trong những lợi ích của việc chuyển đổi datetime2 giá trị thành smalldatetime là bạn giảm kích thước lưu trữ từ 7, 8 hoặc 9 byte xuống còn 4 byte. Tuy nhiên, bạn sẽ mất đi độ chính xác.

datetime2 kiểu dữ liệu cho phép bạn chỉ định độ chính xác giây phân số từ 0 đến 7. Nếu bạn không chỉ định điều này, nó sẽ sử dụng 7 (mặc định). Nếu bạn chỉ định số 0 (0 ), độ chính xác của nó sẽ chính xác đến từng giây.

smalldatetime Mặt khác, kiểu dữ liệu không có bất kỳ phần giây 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.

Khi bạn chuyển đổi datetime2 giá trị thành smalldatetime , ngày và một phần của phần thời gian được sao chép. Thành phần giây được đặt thành 0 (bất kể giá trị ban đầu của thành phần giây) và thời gian được làm tròn đến phút gần nhất. Mọi giây phân số đều bị xóa.

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

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

 DECLARE @ thedatetime2 datetime2, @thesmalldatetime smalldatetime; SET @ thedatetime2 ='2025-05-21 10:15:30.1234567'; SET @thesmalldatetime =@ thedatetime2; SELECT @ thedatetime2 AS 'datetime2', @thesmalldatetime AS 'smalldatetime'; 

Kết quả:

 + ----------------------------- + ---------------- ----- + | datetime2 | smalldatetime || ----------------------------- + ----------------- ---- || 2025-05-21 10:15:30.1234567 | 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 datetime2 giá trị thành smalldatetime biến.

Trong ví dụ này, chúng ta có thể thấy rằng smalldatetime giá trị không bao gồm giây phân số, giây đã được đặt thành 0 và phút đã được làm tròn.

Trong trường hợp này, datetime2 giá trị sử dụng độ chính xác là 7. Điều này là do 7 là giá trị mặc định. Tôi không chỉ định độ chính xác và do đó giá trị mặc định đã được sử dụng.

Nhưng nó sẽ trả về cùng một kết quả bất kể độ chính xác mà tôi đã chọn. Ngay cả khi tôi đã giảm nó xuống 0 (tức là đã khai báo nó là datetime2(0) ), nó vẫn sẽ trả về cùng một kết quả.

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 datetime2 smalldatetime .

 DECLARE @ thedatetime2 datetime2 (0); SET @ thedatetime2 ='2025-05-21 10:15:30'; SELECT @ thedatetime2 AS 'datetime2', CAST (@ thedatetime2 AS smalldatetime) AS 'smalldatetime';  

Kết quả:

 + --------------------- + --------------------- + | datetime2 | smalldatetime || --------------------- + --------------------- || 2025-05-21 10:15:30 | 2025-05-21 10:16:00 | + --------------------- + ---------------- ----- + 

Trong ví dụ này, tôi quyết định sử dụng thang điểm 0 cho datetime2 giá trị (tức là datetime2(0) ), tuy nhiên, điều này không ảnh hưởng đến kết quả smalldatetime giá trị.

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 @ thedatetime2 datetime2 (0); SET @ thedatetime2 ='2025-05-21 10:15:30'; SELECT @ thedatetime2 AS 'datetime2', CONVERT (smalldatetime, @ thedatetime2) AS 'smalldatetime';  

Kết quả:

 + --------------------- + --------------------- + | datetime2 | smalldatetime || --------------------- + --------------------- || 2025-05-21 10:15:30 | 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. Nhận số lần đăng nhập không thành công để đăng nhập do sai mật khẩu trong SQL Server (T-SQL)

  2. Sự khác biệt giữa sys.views, sys.system_views và sys.all_views trong SQL Server

  3. Tôi có thể sử dụng nhiều con trỏ trên một kết nối với pyodbc và MS SQL Server không?

  4. Cách sử dụng TẤT CẢ Toán tử logic trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 126

  5. Sao chép bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong SQL Server