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

Ví dụ về Chuyển đổi "date" thành "datetimeoffset" 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 bộ datetimeoffset giá trị trong SQL Server.

Khi bạn chuyển đổi ngày giá trị thành datetimeoffset , thông tin bổ sung được thêm vào giá trị. Điều này là do bộ datetimeoffset kiểu dữ liệu chứa cả thông tin ngày và giờ, cũng như thông tin bù thời gian. Nói cách khác, bộ datetimeoffset kiểu dữ liệu xác định ngày được kết hợp với thời gian trong ngày có nhận biết múi giờ và dựa trên đồng hồ 24 giờ. Ngày mặt khác, kiểu dữ liệu chỉ chứa thông tin ngày tháng.

Khi chúng tôi chuyển đổi từ ngày đến datetimeoffset , thời gian (và độ lệch múi giờ) được tự động thêm vào giá trị. Tuy nhiên, bạn luôn có thể thay đổi giá trị nếu được yêu cầu (bao gồm cả độ lệch múi giờ).

datetimeoffset kiểu dữ liệu cũng cho phép bạn chỉ định độ chính xác của phân số giây. Nếu bạn không chỉ định điều này, nó sẽ sử dụng thang điểm 7. Điều này có nghĩa là nó sẽ bao gồm 7 chữ số ở phía bên phải của dấu thập phân.

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 datetimeoffset .

DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7)
SET @thedate = '2020-12-01'
SET @thedatetimeoffset = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetimeoffset AS 'datetimeoffset';

Kết quả:

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

Đâ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 bộ datetimeoffset 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 đó, tập hợp ngày giờ biến chứa thông tin bù ngày, giờ và múi giờ.

Khi bạn chuyển đổi giữa ngày datetimeoffset (7) (tức là sử dụng thang điểm 7), thành phần thời gian được đặt thành 00:00:00.0000000 +00:00 . Đây cũng là giá trị mặc định, vì vậy bạn có thể bỏ qua giá trị chính xác và nó sẽ sử dụng thang điểm 7 (dẫn đến độ chính xác là 34). Bạn có thể giảm độ chính xác nếu muốn. 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ị.

Chỉ cần rõ ràng, thang đo là số chữ số ở bên phải dấu thập phân của một số. Độ chính xác là tổng số chữ số trong số.

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

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

Kết quả:

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

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, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';

Kết quả:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 |
+------------+------------------------------------+

Lưu ý rằng bạn không thể sử dụng DATEADD() chức năng sửa đổi thành phần bù thời gian. Nhưng đừng lo lắng, có một cách để sửa đổi nó (đọc để tìm hiểu cách thực hiện).

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

Kết quả:

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

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

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

Kết quả:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 |
+------------+------------------------------------+

Ví dụ 4 - Sửa đổi Khoảng cách Thời gian

Trong các ví dụ trước, chúng tôi đã sử dụng DATEADD() chức năng sửa đổi giá trị thời gian. Chức năng này có thể được sử dụng để sửa đổi bất kỳ phần nào của thành phần ngày hoặc giờ, ngoại trừ thành phần bù thời gian .

Nếu bạn cần sửa đổi độ lệch thời gian, bạn có thể sử dụng TODATETIMEOFFSET() hàm số. Bạn cũng có thể sử dụng chức năng này để chuyển đổi ngày ban đầu giá trị thành bộ datetimeoffset giá trị. Hàm này chấp nhận một giá trị ngày tháng (có thể phân giải thành datetime2 giá trị) và một giá trị bù đắp.

Đây là một ví dụ:

DECLARE @thedate date, @thedatetimeoffset datetimeoffset
SET @thedate = '2020-12-01'
SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00')
SELECT 
  @thedate AS 'date',
  @thedatetimeoffset AS 'datetimeoffset';

Kết quả:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 |
+------------+------------------------------------+

Và đây là một ví dụ sử dụng hàm trong SELECT tuyên bố:

DECLARE @thedate date = '2020-12-01'
SELECT 
  @thedate AS 'date',
  TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';

Kết quả:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 |
+------------+------------------------------------+

TODATETIMEOFFSET() hàm cũng chấp nhận một bộ datetimeoffset giá trị làm tham số đầu tiên của nó, vì vậy bạn cũng có thể sử dụng nó để sửa đổi datetimeoffset hiện có giá trị nếu được yêu cầu.

Ví dụ:

DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7)
SET @thedate = '2020-12-01'
SET @thedatetimeoffset = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetimeoffset AS 'datetimeoffset',
  TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';

Kết quả:

+------------+------------------------------------+------------------------------------+
| date       | datetimeoffset                     | Modified                           |
|------------+------------------------------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07: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. Thiết lập và cấu hình SQL Server Replication

  2. Cách thêm AM / PM vào giá trị thời gian trong SQL Server (T-SQL)

  3. Cách khắc phục “Tùy chọn cấu hình‘ Agent XPs ’không tồn tại” trong SQL Server (T-SQL)

  4. Làm thế nào để chuyển đổi hình ảnh sang mảng byte chỉ sử dụng javascript để lưu trữ hình ảnh trên máy chủ sql?

  5. Phải khai báo biến vô hướng @Id?