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

Ví dụ về Chuyển đổi ‘smalldatetime’ thành ‘datetime’ trong SQL Server (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.

Khi bạn chuyển đổi smalldatetime giá trị thành datetime , 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 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 từ smalldatetime đến ngày giờ .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Kết quả:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Đầu tiên, chúng ta có thể thấy rằng thesmalldatetime giá trị sử dụng 00 cho thành phần giây, ngay cả khi chúng tôi đặt nó ở 29 một cách rõ ràng . Điều này là do khi sử dụng thesmalldatetime kiểu dữ liệu, giây luôn bằng 0 (và không có giây phân số).

Do đó, khi chúng tôi chuyển đổi giá trị thành datetime , giá trị giây (và giây phân số) được đặt thành không. Có phải chúng tôi vừa chỉ định giá trị ban đầu cho datetime ngay từ đầu, số giây sẽ vẫn nguyên vẹn:

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29'
SELECT @thedatetime AS 'thedatetime';

Kết quả:

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.000 |
+-------------------------+

Không chỉ giây vẫn nguyên vẹn mà còn bất kỳ giây phân số nào cũng sẽ không thay đổi (nhưng chỉ lên đến thang điểm 3):

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29.123'
SELECT @thedatetime AS 'thedatetime';

Kết quả:

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.123 |
+-------------------------+

Ví dụ 2 - Làm tròn

Đây là những gì sẽ xảy ra nếu chúng tôi đặt thành phần giây thành giá trị cao hơn trước khi gán nó cho smalldatetime loại dữ liệu.

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:31'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Kết quả:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 |
+---------------------+-------------------------+

Vì vậy, thành phần phút hiện được làm tròn thành phút tiếp theo.

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

Điều này giống với ví dụ đầu tiên, ngoại trừ lần này tôi sử dụng CONVERT() hàm thay vì CAST() .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime, @thesmalldatetime) AS 'datetime';

Kết quả:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

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

Dưới đây là một ví dụ về việc thực hiện điều tương tự, nhưng sử dụng chuyển đổi kiểu ngầm định.

DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SET @thedatetime = @thesmalldatetime
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  @thedatetime AS 'datetime';

Kết quả:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Vì vậy, chúng tôi nhận được cùng một kết quả, bất kể đó là chuyển đổi rõ ràng hay ẩn.

Đây là một chuyển đổi ngầm định vì chúng tôi không sử dụng một hàm chuyển đổi để chuyển đổi một cách rõ ràng. Chúng tôi chỉ đơn giản là chỉ định giá trị từ một biến của một kiểu dữ liệu cho một biến của một kiểu dữ liệu khác. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để nhận được một kết quả float bằng cách chia hai giá trị số nguyên bằng T-SQL?

  2. Không thể sử dụng vị từ CONTAINS hoặc FREETEXT trên bảng hoặc chế độ xem được lập chỉ mục vì nó không được lập chỉ mục toàn văn bản

  3. Tạo Ngày giữa các phạm vi ngày

  4. Các giá trị được phân tách bằng dấu phẩy bằng Truy vấn SQL

  5. Chia phạm vi ngày thành một hàng mỗi tháng trong máy chủ sql