Tôi đoán điều này là không thể vì động cơ không thích nó, nhưng có cách nào (chặn SQL động) để vượt qua trong một DATEPART
như một tham số cho một thủ tục?DATEPART như một tham số
Trả lời
Một lựa chọn là sử dụng một trường hợp với các tham số (sẽ tốt hơn nếu sử dụng liệt kê int thay vì chuỗi):
declare @part varchar(10)
set @part = 'YEAR'
select case @part
when 'YEAR' then datepart(yy, SomeDateTimeColumn)
when 'MONTH' then datepart(mm, SomeDateTimeColumn)
else datepart(dd, SomeDateTimeColumn)
end
from SomeTable
Tại sao bạn không thể chuyển vào Ngày được tạo từ Datepart?
DECLARE @datepart DATETIME
SET @datepart = DATEPART(yyyy, GetDate())
exec spName @datepart
Không. Không có loại dữ liệu "năm". Bạn có thể làm điều này:
CREATE PROC myproc @Year int, @Month tinyint
này sai vì DATEPART phần là một chữ
DECLARE @part varchar(10)
SET @part = 'month'
SELECT DATEPART(@part, GETDATE());
hoặc này và một IF ELSE
CREATE PROC myproc @WhoeDate datetime, @part varchar(10) /* year. month etc*/
Nếu bạn đang cố gắng tạo một thủ tục lưu trữ động, mã sau đây có thể giúp bạn đạt được điều này.
Khi bạn xác định cơ thể của sp, hãy nhớ rằng bạn cần phải sử dụng phím chữ exec sql để thực thi câu sql:
create proc sp_dinamic_procedure(@datepart_sql varchar(20), @datepart_var varchar(8))
as
begin
declare @query varchar(100)
select @query = "select date from table1 t1 where datepart(" + @datepart_var + ", t1.fecha1) = " + @datepart_sql
exec @query
end
Sau đó, bạn có thể vượt qua bất kỳ câu sql để thủ tục lưu trữ của bạn như là một chuỗi dependig duy nhất trên nhu cầu của bạn:
declare @datepart_sql varchar(20), @datepart_var varchar(8)
select @datepart_sql = "datepart(year,getdate()", @datepart_var = "year"
exec sp_dinamic_procedure @datepart_sql, @datepart_var
giải pháp tốt nhất là luôn thêm tháng (hoặc thậm chí ngày nếu bạn cần nó ở mức độ đó) và để chơi với các giá trị số nguyên. Một cái gì đó như thế này
DECLARE @AddMonths INT = 12
SELECT
Sales_DateTime, DATEADD(DAY, -1, DATEADD(MONTH, @AddMonths, DATEADD(DAY, 1, Sales_DateTime)))
FROM tSales
và tôi nghĩ rằng đó là rõ ràng làm thế nào để thêm một tháng chỉ :)
- 1. jQuery: $ như một tham số
- 2. số tuần Wrong sử dụng DATEPART trong SQL Server
- 3. DATEPART (năm, ...) so với năm (...)
- 4. Truyền Lớp như tham số
- 5. sử dụng datepart() với nhóm theo lệnh
- 6. IWindsorContainer như một tham số cho một lớp
- 7. vượt qua một loại như một tham số thuộc tính
- 8. chức năng như tham số vs con trỏ hàm như tham số
- 9. Pointer thành viên lớp như một tham số mẫu
- 10. Sử dụng int như một tham số kiểu cho java.util.Dictionary
- 11. C++ * vs [] như một tham số chức năng
- 12. Đi qua một chức năng như tham số
- 13. hành động với một mảng chuỗi như tham số
- 14. Viết XML đen như một tham số trong Scala
- 15. Chuyển chức năng như một tham số trong java
- 16. C++ sử dụng 'này' như một tham số
- 17. const char * như một tham số hàm trong C++
- 18. Chuỗi mảng khởi như tham số constructor
- 19. Marshalling "như chuỗi" tham số từ C#
- 20. Splitting một inline tuple như tham số cho một hàm với đối số không tuple
- 21. Sử dụng mẫu đối số mẫu lớp như tham số
- 22. Ruby - Có thể truyền một khối như một tham số như một khối thực tế cho một chức năng khác?
- 23. Chuyển một hàm (có tham số) làm tham số?
- 24. Giá trị mặc định của tham số có thể tham chiếu một thông số khác như thế nào?
- 25. Vượt qua một sự kiện như một tham số đến một phương pháp
- 26. Đi qua một chuỗi đa dòng như một tham số để một kịch bản trong Windows
- 27. Đi qua một lớp học như một tham số của một thủ tục trong Delphi XE
- 28. Có thể vượt qua một lớp như một tham số cho một hàm trong C++?
- 29. Tham số int * có chính xác giống như tham số int []
- 30. Đi qua một tham số như một con trỏ trong Javascript
ý tưởng rất tốt và tôi nghĩ rằng bạn sẽ có câu trả lời của tôi; tuy nhiên, tôi muốn chuyển vào 'YEAR' hoặc 'MONTH', không phải một số * dường như * tùy ý ngày tháng. – Brad