6
votes

Obtenez le premier dimanche du mois prochain en utilisant t-SQL

À la recherche d'un moyen d'obtenir la date au format "11/1/2009", qui serait le premier dimanche du mois prochain. Je veux diriger cette requête après le premier dimanche d'octobre pour obtenir le premier dimanche du mois à venir. Quelle est la meilleure méthode pour y accomplir avec une requête T-SQL?

merci


3 commentaires

Donc, vous voulez seulement exécuter cette requête une fois? Ou vous voulez une requête qui utilisera toujours la date du prochain premier dimanche (de sorte que si cela s'est passé pour le mois en cours, cela obtient celui-ci, mais s'il est passé, il obtient le mois prochain)?


Corrigez-le devrait courir chaque mois pour obtenir la date du premier dimanche du mois à venir. Il fonctionnera dans un emploi et fixera une date dans une table qui stocke la prochaine date.


Si vous voulez toujours un mois «suivant», que je n'étais pas sûr de ce que vous n'ayez pas besoin de la solution compliquée que j'ai postée. :)


9 Réponses :


1
votes

Juste un FYI plutôt ensuite avec un certain code pour faire cela de l'utilisation d'une table de calendrier.

Jetez un coup d'œil à ceci: http://web.archive.org/web/20070611150639/http://sqlserver2000.databases.aspfaq.com/why-should-ConSider -utilisant-an-auxiliaire-calendrier-table.html

Cela peut également aider: http://www.sqlteam.com/forums/topic.asp?topic_id= 99696


1 commentaires

J'ai toujours eu peur d'utiliser une table pour stocker des dates telles que celles-ci. Les vacances vont bien comme nous pouvons les localiser, mais les week-ends?



1
votes

Vous pouvez utiliser Datename pour déterminer le jour de votre choix, je pourrais recommander une boucle pour déplacer la date du 01 du mois en question pour aller au premier dimanche.

permet d'essayer: < Pré> xxx

défini à la date de départ avec, puis ajoutez 1 jour jusqu'à ce que vous trouviez ce que vous recherchez. Utilisez datename avec DW ...

Nous avons utilisé ceci pour déterminer les week-ends, mais les vacances seront un problème, où nous utilisons une table pour stocker cela.


0 commentaires

9
votes

Essayez ceci: xxx

modifier des notes:

Le premier du mois prochain est donné par l'expression: xxx

ou par: Ce qui peut être modifié pour donner le premier du mois deux mois à partir de maintenant en modifiant le 1 à A 2: xxx

édition: En réponse à @nissanfan, et @anthony: Pour modifier cela pour renvoyer le premier lundi mardi mercredi, etc., modifiez la valeur 8 à un 9, 10, 11, etc .... xxx


6 commentaires

Très agréable. Beaucoup plus compact. Comment cela pourrait-il être adapté pour sélectionner, disons ... le premier mercredi?


Vous changeriez le% 7 à un% 3


Modulus! Bien sûr. Connaissez-vous un moyen facile de faire le 2e mardi d'un mois par exemple? Grande petite fonction.


Voici un lien vers une fonction plus générale. Vous pouvez utiliser l'expression de Charles pour le paramètre d'entrée "premier de ce mois" requis: groups.google.com/group/microsoft.public.sqlserver.programmi ng / ...


Droite, le premier du mois prochain est datadd (mois, 1 + datrodiff (mois, 0, @d), 0)


Désolé mais il y a un bogue dans cela. Cela dépend de votre réglage de DateFirst. Changez-le à quelque chose d'autre que 7 et cela donne la mauvaise réponse. Différents pays commencent la semaine à différents jours.



0
votes

Essayez ce code en fonction de la fonction:

-- Variables
DECLARE @DATE DATETIME
DECLARE @DAY INT
DECLARE @DAYOFWEEK INT
DECLARE @TESTDATE DATETIME

-- Set
SET @TESTDATE = GETDATE()
SET @DATE = DATEADD( MONTH, 1, @TESTDATE )
SET @DAY = DATEPART( DAY, @TESTDATE )
SET @DATE = DATEADD( DAY, -@DAY + 1, @DATE )
SET @DAYOFWEEK = DATEPART( WEEKDAY, @DATE )
IF @DAYOFWEEK > 1
BEGIN
    SET @DAYOFWEEK = 8 - @DAYOFWEEK
END
ELSE
BEGIN
    SET @DAYOFWEEK = 0
END

SET @DATE = DATEADD( DAY, @DAYOFWEEK, @DATE )

-- Display
PRINT @TESTDATE
PRINT @DAY
PRINT @DAYOFWEEK
PRINT @DATE


0 commentaires

0
votes

Voici le moyen spécifique non système de déterminer le premier dimanche du mois suivant:

Premièrement, obtenez le mois en cours et ajoutez un mois. Ensuite, fixez la date de cette variable pour être le premier. Ensuite, trouvez la valeur de la journée de cette date (supposons que les lundis sont 1 et les dimanches sont 7). Ensuite, soustrayez la valeur de la journée du 1er du mois à partir de la valeur de la journée du dimanche (7).

Vous avez maintenant le nombre de jours entre le premier du mois et le premier dimanche. Vous pouvez ensuite ajouter que la variable de date à obtenir le premier dimanche ou, puisque nous savons que le premier du mois est 1, vous pouvez simplement ajouter une à la différence (trouvée dans cette dernière étape ci-dessus) et c'est la date de le premier dimanche. (Vous devez en ajouter un parce qu'il s'agit de soustraire et donc si le premier du mois donné est dimanche, vous vous retrouveriez avec 0).

J'ai parcouru la documentation T-SQL et je ne suis pas du tout intuitif de la manière dont vous utiliseriez ma méthode, mais vous aurez besoin du concept de "numéro de numéro de la semaine" pour le faire fonctionner quoi que ce soit .


0 commentaires

0
votes

Ce serait le plus simple avec une table de calendrier auxiliaire. Voir Ce lien , par exemple.

Cependant, cela peut être fait sans un, bien que ce soit plutôt délicat. Ici, je suppose que vous voulez la première date future qui est le premier dimanche d'un mois. J'ai écrit cela avec une variable @now pour - bien - maintenant, il est donc plus facile de tester. Il serait peut-être possible d'écrire plus simplement, mais je pense que cela a une meilleure chance d'être correct que des solutions simples rapidement écrites. [Corrigé en ajoutant la journée (d) <8] xxx


0 commentaires

1
votes

Voici une requête pour obtenir le premier jour ouvrable du mois prochain

DECLARE @DAYOFWEEK INT,@ReminderDate DateTime
SET @DAYOFWEEK = DATEPART( WEEKDAY,DateAdd(D,- Day(GetDate())+1, DATEADD(M,1,GetDate())) )
Print @DAYOFWEEK
If @DAYOFWEEK = 1
Set @ReminderDate = DateAdd(D,- Day(GetDate())+2, DATEADD(M,1,GetDate()))
Else If @DAYOFWEEK =7
Set @ReminderDate = DateAdd(D,- Day(GetDate())+3, DATEADD(M,1,GetDate()))
Else
Set @ReminderDate = DateAdd(D,- Day(GetDate())+1, DATEADD(M,1,GetDate()))
Print @ReminderDate


0 commentaires

0
votes

Je pense que la réponse est celle-ci xxx


1 commentaires

La raison pour laquelle cela est un peu obtus est que la fonction doit fonctionner quel que soit votre réglage de DateFirst. Différentes nationalités commencent la semaine à une journée différente. Nous par défaut à Datefirst étant 7 mais que cela n'est toujours pas le cas. Non monsieur. Si vous voulez des jours différents, changez les cinq à la fin à n'importe quelle valeur entre 0 et 6 pour voir ce qui se passe



1
votes

référence prise de ce blog: strong>

SQL Server 2012 a introduit un nouveau TSQL Eomezth pour retourner le dernier jour du mois contenant la date spécifiée avec un décalage optionnel. P >

CREATE TABLE tbl_Test_EOMONTH
(
    SampleDate DATETIME
)
GO

INSERT INTO tbl_Test_EOMONTH VALUES ('2015-12-20')
INSERT INTO tbl_Test_EOMONTH VALUES ('2015-11-08')
INSERT INTO tbl_Test_EOMONTH VALUES ('2015-10-16')
INSERT INTO tbl_Test_EOMONTH VALUES ('2015-09-26')
INSERT INTO tbl_Test_EOMONTH VALUES ('2016-01-31') 
GO

SELECT 
    DATEADD(DAY,8-DATEPART(WEEKDAY,DATEADD(DAY,0,EOMONTH([SampleDate])))
    ,EOMONTH([SampleDate])) AS FirstSunday_ofTheNextMonth
FROM tbl_Test_EOMONTH
GO


0 commentaires