2017-10-12 4 views
1

J'ai une colonne DueDate dans ma table et en fonction de cette date, je veux afficher la valeur "Semaine de ..." basée sur la date du lundi .Comment obtenir la "Semaine du 2ème" en fonction du champ de date dans SQL Server 2012

Je veux quelque chose comme ceci:

enter image description here

+1

Vous ne voulez pas afficher la date complète? Qu'est-ce que vous voulez faire quand le début de la semaine est un mois différent? Par exemple le 1er novembre? –

+1

Il est utile d'étiqueter les questions de base de données à l'aide du logiciel approprié (MySQL, Oracle, DB2, ...) et de la version, par ex. 'sql-server-2014'. Les différences de syntaxe et de caractéristiques affectent souvent les réponses, par ex. 'DateFromParts()'. Notez que 'tsql' rétrécit les choix, mais ne spécifie pas la base de données. – HABO

+0

Copie possible de [Obtenir le numéro de la semaine dans l'année à partir de la date] (https://stackoverflow.com/questions/42794544/get-week-number-in-year-from-date) – Igor

Répondre

2

Vous pouvez combiner la réponse trouvée here avec la fonction "DatePart" comme ceci:

SELECT 
     'Week Of ' + CONVERT(VARCHAR(2), DATEPART(DAY,DATEADD(DAY, (2-DATEPART(WEEKDAY, GETDATE())), GETDATE()))) + CASE 
                     WHEN DATEPART(DAY, GETDATE()) % 100 IN (11,12,13) THEN 'th' --first checks for exception 
                     WHEN DATEPART(DAY, GETDATE()) % 10 = 1 THEN 'st' 
                     WHEN DATEPART(DAY, GETDATE()) % 10 = 2 THEN 'nd'                            
                     WHEN DATEPART(DAY, GETDATE()) % 10 = 3 THEN 'rd'                            
                     ELSE 'th' --works for num % 10 IN (4,5,6,7,8,9,0)                           
                    END 
+0

Merci, mais la semaine de .. . »doivent être basés sur les lundis. Comme dans un exemple – Oleg

+0

@Oleg J'ai modifié ma réponse pour mieux correspondre à votre question – TheMountainPass

+0

Awesome! Merci beaucoup! – Oleg

1

Essayez celui-ci:

select date, 
('week of ' + 
convert(varchar(2), datepart(day, DATEADD(day, -(case when datepart(weekday, date)=1 then 8 else datepart(weekday, date) end)+2, date)))) 
as monday 
from table1; 

Voir Fiddle.

Cela pourrait être plus simple si le dimanche est pas considéré le même que le lundi dernier, mais la prochaine

1

Je pense que vous pouvez utiliser la fonction DATEPART pour obtenir le jour numérique de la semaine, puis construire en une déclaration de cas pour compte pour le début lundi ... comme celui-ci (où vous souhaitez remplacer votre date à laquelle je '10/1/2017):

select 'Week of ' + CONVERT(VARCHAR(10),DATEADD(dd, -DATEPART(dw,'10/1/2017') 
    + CASE WHEN DATEPART(dw,'10/1/2017') = 1 THEN -5 ELSE 2 END, '10/1/2017'),101) 

Edit: juste de réaliser ma réponse est effectivement la même chose que Psidom; yay frappe lentement.