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

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

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

smalldatetime kiểu dữ liệu 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.

datetime2 Mặt khác, 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.

Khi bạn chuyển đổi smalldatetime giá trị thành datetime2 , giờ và phút được sao chép. Giây và giây phân số được đặt thành 0.

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

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

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

Kết quả:

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

Đây là một chuyển đổi ngầm định vì chúng tôi không sử dụng một chức năng chuyển đổi (như những chức năng 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 chỉ định smalldatetime giá trị thành datetime2 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. Điều này dẫn đến 7 số không được sử dụng trong phần phân số.

Ví dụ 2 - Loại bỏ Phần phân số

Bạn có thể xóa giây phân số nếu cần. Để thực hiện việc này, chỉ cần sử dụng datetime2(0) khi khai báo biến.

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

Kết quả:

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

Vì vậy, trong trường hợp này cả hai kiểu dữ liệu đều trả về cùng một giá trị. Tuy nhiên, điểm khác biệt là datetime2 có khả năng cung cấp độ chính xác đến từng giây (so với smalldatetime Độ chính xác đến từng phút).

Ví dụ:

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

Kết quả:

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

Trong ví dụ này, tôi đã sử dụng DATEADD() chức năng thêm 30 giây cho mỗi giá trị. Tuy nhiên, mỗi kiểu dữ liệu trả về một kết quả khác nhau. datetime2 kiểu dữ liệu tôn vinh phần giây và cung cấp kết quả chính xác với độ chính xác 100%. smalldatetime mặt khác, được làm tròn lên đến phút gần nhất (trong khi phần giây vẫn ở số 0).

Ví dụ 3 - 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 câu lệnh để chuyển đổi rõ ràng giữa smalldatetime datetime2 .

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

Kết quả:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

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

Kết quả:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16: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. Kiểm tra ràng buộc trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / TSQL Phần 82

  2. Học thiết kế cơ sở dữ liệu với SQL Server Management Studio (SSMS) - Phần 2

  3. 3 cách chuyển đổi số nguyên thành số thập phân trong SQL Server

  4. Cách chuyển đổi danh sách được phân tách bằng dấu phẩy thành hàng trong SQL Server

  5. Cách tìm số nhận dạng duy nhất tối ưu trong bảng trong SQL Server:sp_special_columns