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

Chuyển đổi ‘smalldatetime’ thành ‘datetime’ 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 ngày giờ 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.

Ngày giờ mặt khác, kiểu dữ liệu bao gồm phần giây phân số gồm 3 chữ số và độ chính xác của nó được làm tròn đến các gia số .000, .003 hoặc .007 giây.

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

Trong hầu hết các trường hợp, bạn nên chuyển đổi sang datetime2 loại dữ liệu thay vì ngày giờ . Làm điều này sẽ cung cấp độ chính xác cao hơn, trong khi sử dụng cùng một kích thước lưu trữ. Tuy nhiên, nếu bạn thực sự cần thì đó là datetime , đây là một số ví dụ.

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 ngày giờ .

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

Kết quả:

+---------------------+-------------------------+
| smalldatetime       | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

Đâ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 chỉ định smalldatetime giá trị thành ngày giờ 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 từ giá trị thực mà tôi đã cố gắng gán cho nó.

Tuy nhiên, ngày giờ giá trị bao gồm một phần phân số có 3 chữ số được đặt thành 0.

Ví dụ 2 - Thay đổi Phần phân số

Mặc dù phần phân số được đặt thành 0, sau khi bạn đã chuyển đổi giá trị thành datetime , bây giờ bạn có thể thay đổi phần phân số (và phần giây cho vấn đề đó).

Trong ví dụ này, tôi sử dụng DATEADD() chức năng sửa đổi số giây phân đoạn của ngày giờ giá trị.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime datetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime AS 'datetime',
  DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';

Kết quả (sử dụng đầu ra dọc):

smalldatetime     | 2025-05-21 10:16:00
datetime          | 2025-05-21 10:16:00.000
datetime Modified | 2025-05-21 10:16:00.123

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 ngày giờ .

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

Kết quả:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

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(datetime, @thesmalldatetime) AS 'datetime';

Kết quả:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

Như đã đề cập, hãy cân nhắc chuyển đổi sang datetime2 loại dữ liệu thay vì ngày giờ . Làm điều này giúp tăng độ chính xác trong khi sử dụng cùng kích thước bộ nhớ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các kỹ thuật tốt hơn để cắt bớt các số không ở đầu trong SQL Server?

  2. Ngày xử lý trong SQL Server

  3. Cách cập nhật khóa chính

  4. Cách đặt đối chiếu của cơ sở dữ liệu trong SQL Server (T-SQL)

  5. Nhận quyền thực thi đối với xp_cmdshell