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

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

Nếu bạn có datetimeoffset nhưng bạn không cần phần bù múi giờ và múi giờ, chuyển đổi nó thành ngày sẽ giúp bạn tiết kiệm rất nhiều không gian lưu trữ (đồng thời loại bỏ các chi tiết không cần thiết khỏi giá trị). Bài viết này chứa các ví dụ về chuyển đổi bộ datetimeoffs giá trị của một ngày tháng giá trị trong SQL Server.

datetimeoffset kiểu dữ liệu bao gồm ngày và giờ với độ lệch múi giờ. Nó cũng có một phần giây phân số từ 0 đến 7 (điều này phụ thuộc vào số giây phân số được gán cho nó). Điều này được thực hiện bằng cách sử dụng datetimeoffset(n) cú pháp. Nếu bạn không chỉ định điều này, nó sẽ sử dụng 7 (mặc định). Kích thước lưu trữ của loại dữ liệu này là 8, 9 hoặc 10 byte (cộng thêm 1 byte để lưu trữ độ chính xác), tùy thuộc vào độ chính xác đang được sử dụng. Độ chính xác của nó là 100 nano giây.

Ngày mặt khác, kiểu dữ liệu chỉ bao gồm ngày tháng. Nó không bao gồm thời gian và có độ chính xác là 1 ngày. Nó sử dụng 3 byte để lưu trữ.

Khi bạn chuyển đổi bộ datetimeoffs giá trị của một ngày tháng kiểu dữ liệu, bạn sẽ mất phần thời gian (bao gồm cả độ lệch múi giờ). Tuy nhiên, bạn cũng giảm dung lượng lưu trữ xuống 3 byte cố định. Tất nhiên, bạn sẽ chỉ thực hiện chuyển đổi này nếu bạn không cần chênh lệch múi giờ và múi giờ.

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

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

DECLARE 
  @thedatetimeoffset datetimeoffset, 
  @thedate date;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SET @thedate = @thedatetimeoffset;
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  @thedate AS 'date';

Kết quả:

+------------------------------------+------------+
| datetimeoffset                     | date       |
|------------------------------------+------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
+------------------------------------+------------+

Đâ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 datetimeoffset giá trị của một ngày tháng biến.

Ở đây, chúng ta có thể thấy rằng ngày giá trị chỉ bao gồm ngày (không có thành phần thời gian). Thành phần thời gian, bao gồm cả độ lệch múi giờ của nó, đã bị xóa khỏi giá trị.

Trong ví dụ này, datetimeoffset giá trị sử dụng độ chính xác mặc định (dẫn đến 7 chữ số thập phân). Điều này dẫn đến kiểu dữ liệu sử dụng 10 byte (thực tế là 11 byte nếu bạn đếm thêm byte lưu trữ độ chính xác). Ngày giá trị chỉ sử dụng 3 byte.

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

DECLARE @thedatetimeoffset datetimeoffset;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  CAST(@thedatetimeoffset AS date) AS 'date'; 

Kết quả:

+------------------------------------+------------+
| datetimeoffset                     | date       |
|------------------------------------+------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
+------------------------------------+------------+

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 @thedatetimeoffset datetimeoffset;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  CONVERT(date, @thedatetimeoffset) AS 'date';

Kết quả:

+------------------------------------+------------+
| datetimeoffset                     | date       |
|------------------------------------+------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
+------------------------------------+------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn bộ xử lý cho SQL Server 2012

  2. Gọi thủ tục được lưu trữ với tham số có giá trị bảng từ java

  3. Chuyển đổi varchar thành datetime trong SQL Server

  4. Tối ưu hóa truy vấn SQL:Các phương pháp hay nhất để cải thiện hiệu suất

  5. Thêm giá trị mặc định của trường datetime trong SQL Server vào dấu thời gian