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

Tạo một ngày từ tháng và năm với T-SQL

Hãy thử điều này:

Declare @DayOfMonth TinyInt Set @DayOfMonth = 13
Declare @Month TinyInt Set @Month = 6
Declare @Year Integer Set @Year = 2006
-- ------------------------------------
Select DateAdd(day, @DayOfMonth - 1, 
          DateAdd(month, @Month - 1, 
              DateAdd(Year, @Year-1900, 0)))

Nó cũng hoạt động, có thêm lợi ích là không thực hiện bất kỳ chuyển đổi chuỗi nào, vì vậy nó là xử lý số học thuần túy (rất nhanh) và không phụ thuộc vào bất kỳ định dạng ngày nào giá trị phần đầu tiên là một số nguyên đại diện cho số ngày kể từ ngày 1 tháng 1 năm 1900 và phần thứ hai là một phần thập phân đại diện cho phần thập phân của một ngày (cho thời gian) --- Vì vậy, giá trị số nguyên 0 (không) luôn dịch trực tiếp sang Nửa đêm sáng ngày 1 tháng 1 năm 1900 ...

hoặc nhờ gợi ý từ @becial,

Select DateAdd(yy, @Year-1900,  
       DateAdd(m,  @Month - 1, @DayOfMonth - 1)) 

Được chỉnh sửa vào tháng 10 năm 2014. Như được ghi nhận bởi @cade Roux, SQL 2012 hiện có một chức năng tích hợp:
DATEFROMPARTS(year, month, day)
điều đó cũng hoạt động tương tự.

Đã chỉnh sửa ngày 3 tháng 10 năm 2016, (Cảm ơn @bambams đã nhận thấy điều này và @buria đã sửa nó), Giải pháp cuối cùng do @brets đề xuất. Dường như không hoạt động trong những năm nhuận trừ khi việc bổ sung năm được thực hiện trước

select dateadd(month, @Month - 1, 
     dateadd(year, @Year-1900, @DayOfMonth - 1)); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm số nhận dạng duy nhất tối ưu trong bảng trong SQL Server:sp_special_columns

  2. Truy vấn SQL - Nối kết quả thành một chuỗi

  3. Tổng quan về Nhiệm vụ Dịch vụ giám sát cơ sở dữ liệu mới nhất - Spotlight Cloud

  4. Triển khai tải gia tăng bằng cách sử dụng Thay đổi tính năng thu thập dữ liệu trong SQL Server

  5. Định nghĩa báo cáo SSRS mới hơn Máy chủ