Je suppose que ce n'est pas possible car le moteur ne l'aime pas, mais existe-t-il un moyen (sauf SQL dynamique) de passer un DATEPART
comme paramètre à une procédure? Pourquoi ne pouvez-vous pas simplement passer la Date créée à partir de la DatePart?DATEPART en tant que paramètre
Répondre
Une option consiste à utiliser un cas avec le paramètre (il serait préférable d'utiliser une énumération int au lieu d'une chaîne):
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
DECLARE @datepart DATETIME
SET @datepart = DATEPART(yyyy, GetDate())
exec spName @datepart
Non. Il n'y a pas de type de données "année". Vous pouvez le faire:
CREATE PROC myproc @Year int, @Month tinyint
Cela échoue parce qu'une partie DATEPART est un littéral
DECLARE @part varchar(10)
SET @part = 'month'
SELECT DATEPART(@part, GETDATE());
ou cela et un SI AUTRE
CREATE PROC myproc @WhoeDate datetime, @part varchar(10) /* year. month etc*/
Si vous essayez de créer une procédure stockée dynamique, le code suivant pourrait vous aider à atteindre cet objectif.
Lorsque vous définissez le corps du sp, rappelez-vous que vous devez utiliser exec sql mot-clé pour exécuter la sentence 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
Vous pouvez alors passer une phrase sql à votre procédure stockée en tant que dependig unique chaîne de vos besoins:
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
la meilleure solution est d'ajouter toujours mois (ou même plusieurs jours si vous en avez besoin à ce niveau) et de jouer avec des valeurs entières. Quelque chose comme ça
DECLARE @AddMonths INT = 12
SELECT
Sales_DateTime, DATEADD(DAY, -1, DATEADD(MONTH, @AddMonths, DATEADD(DAY, 1, Sales_DateTime)))
FROM tSales
et je pense qu'il est clair comment ajouter un seul mois :)
- 1. HttpSessionState en tant que paramètre
- 2. tableau en tant que paramètre
- 3. isPostBack en tant que paramètre de requête
- 4. C# SQL Top en tant que paramètre
- 5. Collection Xslt en tant que paramètre
- 6. Passer une requête en tant que paramètre
- 7. Passage de BeginInvoke en tant que paramètre
- 8. Passer l'URL en tant que paramètre
- 9. IWindsorContainer en tant que paramètre d'une classe
- 10. passage condition booléenne en tant que paramètre
- 11. Passer un NSArray en tant que paramètre?
- 12. C++ passe ENUM en tant que paramètre
- 13. en passant une fonction en tant que paramètre?
- 14. type anonyme en tant que paramètre de méthode
- 15. Passage d'un noeud en tant que modèle XSL Paramètre
- 16. Coller nom de la table en tant que paramètre
- 17. L'utilisation d'un tableau en tant que paramètre à une classe
- 18. initialisation de tableau chaîne en tant que paramètre constructeur
- 19. passage nom Crystal Report en tant que paramètre
- 20. Envoi d'une ArrayList en tant que paramètre dans GWT-RPC
- 21. envoyer IQueryable en tant que paramètre à la fonction
- 22. passer tableau en tant que paramètre pour le fichier PHP
- 23. Variable d'instance Python en tant que paramètre par défaut
- 24. tableau de pointeurs en tant que paramètre de fonction
- 25. ObjectDataSource DataObjectTypeName Aide. Faire passer l'objet en tant que paramètre
- 26. Interface de service Web - Type complexe en tant que paramètre?
- 27. Comment passez-vous un Container.DataItem en tant que paramètre?
- 28. Passing Interface en tant que paramètre à une méthode d'extension
- 29. C# Type de paramètre en tant que déclaration générique
- 30. Variable de session Joomla en tant que paramètre de plugin
très bonne idée et je pense que vous serez ma réponse; cependant, je voulais passer en 'YEAR' ou 'MONTH', pas une date * apparemment * arbitraire. – Brad