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

Ví dụ về Chuyển đổi "date" thành "datetime2" trong SQL Server (T-SQL)

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

Khi bạn chuyển đổi ngày giá trị thành datetime2 , thông tin bổ sung được thêm vào giá trị. Điều này là do datetime2 kiểu dữ liệu chứa cả thông tin ngày và giờ. Ngày mặt khác, kiểu dữ liệu chỉ chứa thông tin ngày tháng.

datetime2 loại dữ liệu về cơ bản là một phần mở rộng của datetime loại dữ liệu. Nó có phạm vi ngày lớn hơn, độ chính xác phân số mặc định lớn hơn và độ chính xác do người dùng chỉ định tùy chọn.

Trong mọi trường hợp, quá trình chuyển đổi hoàn toàn giống nhau bất kể loại dữ liệu nào. Sự khác biệt duy nhất là lượng thông tin có sẵn giữa ngày , ngày giờ datetime2 .

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

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

DECLARE @thedate date, @thedatetime2 datetime2
SET @thedate = '2020-12-01'
SET @thedatetime2 = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime2 AS 'datetime2';

Kết quả:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

Đâ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 ngày giá trị thành datetime2 biến.

Chúng ta có thể thấy rằng ngày biến chỉ chứa thông tin ngày tháng, trong khi đó, datetime2 biến chứa cả thông tin ngày và giờ.

Hơn nữa, chúng tôi nhận được nhiều thông tin về thời gian hơn những gì chúng tôi nhận được nếu chúng tôi chuyển đổi nó thành ngày giờ kiểu dữ liệu.

Khi bạn chuyển đổi giữa ngày datetime2 sử dụng độ chính xác mặc định (7), thành phần thời gian được đặt thành 00:00:00.0000000 (so với 00:00:00.000 cho ngày giờ ). Bạn có thể giảm độ chính xác nếu muốn (xem bên dưới). Giảm độ chính xác cũng có thể làm giảm lượng không gian cần thiết để lưu trữ giá trị.

Lý do thành phần thời gian là tất cả các số không là vì giá trị ngày không chứa bất kỳ thông tin thời gian nào, do đó, SQL Server không có cách nào để biết thời gian bạn muốn (nếu có).

Ví dụ 2 - Sửa đổi thời gian

Nếu bạn cần chỉ định thời gian (nhưng giữ nguyên ngày), bạn có thể sử dụng DATEADD() chức năng để làm điều đó.

DECLARE @thedate date, @thedatetime2 datetime2
SET @thedate = '2020-12-01'
SET @thedatetime2 = @thedate
SET @thedatetime2 = DATEADD(hour, 8, @thedatetime2)
SELECT 
  @thedate AS 'date',
  @thedatetime2 AS 'datetime2';

Kết quả:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

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 tuyên bố để chuyển đổi rõ ràng giữa ngày datetime2 .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetime2) AS 'datetime2';

Kết quả:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

Vì vậy, chúng tôi nhận được kết quả tương tự như chuyển đổi ngầm định.

Chúng tôi cũng có thể điều chỉnh thời gian như sau:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CAST(@thedate AS datetime2)) AS 'datetime2';

Kết quả:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

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 @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime2, @thedate) AS 'datetime2';

Kết quả:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

Và điều chỉnh thời gian:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CONVERT(datetime2, @thedate)) AS 'datetime2';

Kết quả:

+------------+-----------------------------+
| date       | datetime2                   |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

Ví dụ 5 - Độ chính xác

datetime2 kiểu dữ liệu cho phép bạn chỉ định độ chính xác (lên đến 7 mặc định). Nói cách khác, bạn không cần sử dụng đủ 7 chữ số nếu không cần thiết.

Ví dụ:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime2(2), @thedate) AS 'datetime2(2)',
  CONVERT(datetime2(4), @thedate) AS 'datetime2(4)';

Kết quả:

+------------+------------------------+--------------------------+
| date       | datetime2(2)           | datetime2(4)             |
|------------+------------------------+--------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.00 | 2020-12-01 00:00:00.0000 |
+------------+------------------------+--------------------------+

Một lợi ích của việc giảm độ chính xác là nó cũng có thể giảm lượng không gian cần thiết để lưu trữ giá trị. Đặc biệt, 6 byte cho độ chính xác nhỏ hơn 3, 7 byte cho độ chính xác 3 hoặc 4 và tất cả các độ chính xác khác yêu cầu 8 byte. Tuy nhiên, lưu ý rằng byte đầu tiên được sử dụng để lưu trữ độ chính xác, vì vậy giá trị thực là kích thước lưu trữ được chỉ ra ở đây cộng với 1 byte bổ sung để lưu trữ độ chính xác.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo bảng trong SQL Server (T-SQL)

  2. SQL Server Standard Edition Tương lai khả dụng cao

  3. SYSDATETIMEOFFSET () Ví dụ trong SQL Server (T-SQL)

  4. Trả lại tất cả các ràng buộc bị vô hiệu hóa trong SQL Server (Ví dụ T-SQL)

  5. Thêm mối quan hệ Khoá ngoại giữa hai Cơ sở dữ liệu