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

Ví dụ về Chuyển đổi 'time' thành 'datetime' trong SQL Server (T-SQL)

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

Khi bạn chuyển đổi thời gian giá trị thành datetime , thông tin bổ sung được thêm vào giá trị. Điều này là do ngày giờ kiểu dữ liệu chứa cả thông tin ngày và giờ. thời gian mặt khác, kiểu dữ liệu chỉ chứa thông tin thời gian. Do đó, thông tin ngày tháng được thêm vào giá trị khi bạn thực hiện chuyển đổi như vậy. Cụ thể, ngày được đặt thành '1900-01-01'.

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ừ thời gian đến ngày giờ .

DECLARE @thetime time
SET @thetime = '23:15:59.004007'
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime) AS 'datetime';

Kết quả:

+------------------+-------------------------+
| time             | datetime                |
|------------------+-------------------------|
| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |
+------------------+-------------------------+

Khi bạn chuyển đổi từ thời gian đến ngày giờ , thành phần ngày được đặt thành 1900-01-01 .

Cũng lưu ý rằng bản thân giá trị thời gian được trình bày khác nhau trên cả hai kiểu dữ liệu này. thời gian kiểu dữ liệu thêm số 0 vào cuối (vì nó có độ chính xác cao hơn - tỷ lệ mặc định của nó là 7). Mặt khác, ngày giờ các giá trị sử dụng thang đo thấp hơn và được làm tròn đến các gia số .000, .003 hoặc .007 giây. Nếu bạn thấy điều này có vấn đề, hãy xem xét chuyển đổi thành datetime2 thay thế.

Ví dụ 2 - Độ chính xác / Tỷ lệ thấp hơn

Trong ví dụ trước, thời gian giá trị có độ chính xác giây phân số cao hơn so với ngày giờ giá trị. Điều này là do nó sử dụng tỷ lệ mặc định là 7. Nhưng chúng tôi có thể thay đổi tỷ lệ này thành một giá trị thấp hơn nếu được yêu cầu.

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ố. Chúng tôi có thể chỉ định tỷ lệ bằng cách thêm một số trong ngoặc vào loại dữ liệu.

Đây là những gì sẽ xảy ra nếu tôi đặt thời gian một cách rõ ràng giá trị để có thấp hơn mở rộng hơn ngày giờ giá trị.

DECLARE @thetime time(0)
SET @thetime = '23:15:59.004007'
SELECT 
  @thetime AS 'time',
  CAST(@thetime AS datetime) AS 'datetime';

Kết quả:

+----------+-------------------------+
| time     | datetime                |
|----------+-------------------------|
| 23:15:59 | 1900-01-01 23:15:59.000 |
+----------+-------------------------+

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 @thetime time
SET @thetime = '23:15:59.004007'
SELECT 
  @thetime AS 'time',
  CONVERT(datetime, @thetime) AS 'datetime';

Kết quả:

+------------------+-------------------------+
| time             | datetime                |
|------------------+-------------------------|
| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |
+------------------+-------------------------+

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 @thetime time, @thedatetime datetime
SET @thetime = '23:15:59.004007'
SET @thedatetime = @thetime
SELECT 
  @thetime AS 'time',
  @thedatetime AS 'datetime';

Kết quả:

+------------------+-------------------------+
| time             | datetime                |
|------------------+-------------------------|
| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |
+------------------+-------------------------+

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 bởi 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 ấn định thời gian giá trị thành ngày giờ biến.

Ví dụ 5 - Thay đổi ngày

Nếu bạn cần thay đổi ngày (nhưng giữ nguyên thời gian), bạn có thể sử dụng DATEADD() hàm số.

DECLARE @thetime time, @thedatetime datetime
SET @thetime = '23:15:59.004007'
SET @thedatetime = @thetime
SET @thedatetime = DATEADD(year, 120, @thedatetime)
SELECT 
  @thetime AS 'time',
  @thedatetime AS 'datetime';

Kết quả:

+------------------+-------------------------+
| time             | datetime                |
|------------------+-------------------------|
| 23:15:59.0040070 | 2020-01-01 23:15:59.003 |
+------------------+-------------------------+

Trong trường hợp này, tôi thêm 120 vào giá trị năm, giá trị này sẽ đưa nó đến năm 2020.


  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 cột “Sửa đổi lần cuối” trong SQL Server

  2. Toán tử tổng hợp nhân trong SQL

  3. Giải pháp cho:Cập nhật cửa hàng, chèn hoặc xóa câu lệnh ảnh hưởng đến một số hàng không mong muốn (0)

  4. Visual Studio:ContextSwitchDeadlock

  5. Một thay đổi quan trọng đối với Sự kiện mở rộng trong SQL Server 2012