Я предполагаю, что это невозможно, поскольку движок ему не нравится, но есть ли способ (запрет динамического SQL) передать в DATEPART
в качестве параметра процедуры?DATEPART как параметр
ответ
Одним из вариантов является использование СЛУЧАЙ с параметром (лучше было бы использовать перечисление int вместо строки):
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
Почему вы не можете просто передать дату, созданную из Datepart?
DECLARE @datepart DATETIME
SET @datepart = DATEPART(yyyy, GetDate())
exec spName @datepart
№ Нет. Тип данных типа "год" отсутствует. Вы можете сделать это:
CREATE PROC myproc @Year int, @Month tinyint
Это терпит неудачу, потому что DATEPART часть является буквальным
DECLARE @part varchar(10)
SET @part = 'month'
SELECT DATEPART(@part, GETDATE());
или это и IF ELSE
CREATE PROC myproc @WhoeDate datetime, @part varchar(10) /* year. month etc*/
Если вы пытаетесь создать динамическую хранимую процедуру, следующий код поможет вам в этом.
При определении тело зр, помните, что вам нужно использовать EXEC SQL ключевого слова, чтобы выполнить 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
Затем вы можете передать любое SQL предложение хранимой процедуры в качестве одна строка dependig от ваших потребностей:
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
Лучшее решение всегда добавлять месяцы (или даже дней, если вам это нужно на этом уровне) и играть с целыми значениями. Нечто подобное
DECLARE @AddMonths INT = 12
SELECT
Sales_DateTime, DATEADD(DAY, -1, DATEADD(MONTH, @AddMonths, DATEADD(DAY, 1, Sales_DateTime)))
FROM tSales
, и я думаю, что это ясно, как добавить еще один месяц только :)
- 1. Как объединить результаты datepart?
- 2. Хранение DATEPART в таблице
- 3. Ошибка выполнения: неверный параметр 1, указанный для datepart - VBA - SQL
- 4. DATEPART рассчитать
- 5. Как использовать GROUP с DATEPART?
- 6. Использование DatePart() с диапазонами дат, пересекающих границу datepart
- 7. DatePart in asp.net
- 8. DATEPART результат формат, время
- 9. SSAS MDX DatePart iso_week
- 10. SQL Server DATEPART() функция
- 11. Поддерживает ли BQL DatePart?
- 12. Nhibernate выберите DatePart
- 13. Datepart() есть ли способ использовать переменную для интервала datepart
- 14. DATEPART() в sqldf
- 15. Использование наименее с DatePart?
- 16. Неожиданное поведение DATEPART
- 17. SQL DATEPART добавив
- 18. SSRS datepart выражение, Ошибка
- 19. Конкатенация DATEADD & DATEPART
- 20. Группа DATEPART() error/error
- 21. Как получить ведущие ноль с DatePart?
- 22. Как использовать DatePart в критериях Hibernate
- 23. как использовать новообращенный и DATEPART одновременно
- 24. Как установить формат для DateTimePicker DatePart WPf
- 25. Как использовать функцию поворота, используя DATEPART поля
- 26. Как использовать значение NULL при использовании DATEPART?
- 27. Как обращаться с DATEFIRST при использовании DATEPART
- 28. Как исправить ошибку спящего режима datepart error?
- 29. Как изменить datepart в datetime в .NET?
- 30. Как использовать datepart в SQL sERVER?
очень хорошая идея, и я думаю, что вы будете моим ответом; однако я хотел перейти в «ГОД» или «МЕСЯЦ», а не какую-то * кажущуюся * произвольную дату. – Brad