2009-02-19 11 views
23

Possible en double:
Get just the Date from grouping in select from DateTime column in SQL ServerObtenez seulement la partie Date de DateTime dans MSSQL

Comment puis-je obtenir que la partie Date d'un DateTime? Je cherche quelque chose comme la fonction year() mais pour toute la date.

+0

Voir aussi: http://stackoverflow.com/questions/133081/most-efficient-way-in-ms-sql-to-get -date-from-datetime et http://stackoverflow.com/questions/2775/whats-the-best-way-to-remove-the-time-portion-of-a-datetime-value-sql-server – Kristen

Répondre

28

La solution que vous voulez est celle proposée ici:

https://stackoverflow.com/a/542802/50776

Fondamentalement, vous faites ceci:

cast(floor(cast(@dateVariable as float)) as datetime) 

Il y a une définition de fonction dans le lien qui vous permettra de consolider la fonctionnalité et l'appeler n'importe où (au lieu d'avoir à s'en souvenir) si vous le souhaitez.

+0

ici est la meilleure réponse https://stackoverflow.com/questions/113045/how-to-return-only-the-date-from-a-sql-server-datetime-datatype – Adeem

15

Une autre façon est astucieuse:

DATEADD(dd, 0, DATEDIFF(dd, 0, [YourDate])) 

qui obtient le nombre de jours du jour de 0 à YourDate et l'ajoute à jour 0 de régler à nouveau la ligne de base. Cette méthode (ou "dérivés" de celle-ci) peut être utilisée pour un tas d'autres manipulations de date.

Modifier - autres calculs de date:

premier jour du mois:

DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0) 

premier jour de l'année:

DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0) 

premier jour du trimestre:

DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0) 

Dernier jour y du mois précédent:

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)) 

Dernier jour du mois actuel:

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate()) + 1, 0)) 

dernier jour de l'année en cours:

DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()) + 1, 0)) 

Premier lundi du mois:

DATEADD(wk, DATEDIFF(wk, 0, DATEADD(dd, 6 - DATEPART(day, getdate()), getdate())), 0)   

Modifier: Il est vrai, Joe, il ne l'ajoute pas au JOUR 0, il ajoute 0 (jours) au nombre de jours qui, fondamentalement, le convertit simplement en un datetime.

+0

Dateadd (intervalle, nombre, date). .. Donc, essentiellement, vous ajoutez 0 à cela. .. cast (datediff (dd, 0, [votredomaine]) comme datetime) – dotjoe

2

Cela peut ne pas être aussi lisse comme une doublure, mais je l'utiliser pour effectuer des manipulations de date principalement pour les rapports:

DECLARE @Date datetime 
SET @Date = GETDATE() 

-- Set all time components to zero 
SET @Date = DATEADD(ms, -DATEPART(ms, @Date), @Date) -- milliseconds = 0 
SET @Date = DATEADD(ss, -DATEPART(ss, @Date), @Date) -- seconds = 0 
SET @Date = DATEADD(mi, -DATEPART(mi, @Date), @Date) -- minutes = 0 
SET @Date = DATEADD(hh, -DATEPART(hh, @Date), @Date) -- hours = 0 

-- Extra manipulation for month and year 
SET @Date = DATEADD(dd, -DATEPART(dd, @Date) + 1, @Date) -- day = 1 
SET @Date = DATEADD(mm, -DATEPART(mm, @Date) + 1, @Date) -- month = 1 

J'utiliser pour obtenir toutes les heures, tous les jours, les dates mensuelles et annuelles utilisées pour les rapports et les indicateurs de performance, etc.

6

Nous pouvons utiliser cette méthode:

CONVERT(VARCHAR(10), GETDATE(), 120) 

Le dernier paramètre modifie le format seulement pour obtenir heure ou la date dans des formats spécifiques.

65

Cela peut aussi aider à:

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM) 
             -- Oct 2 2008 11:01AM 
SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2008     
SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02   
SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy 
SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy 
SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy 
SELECT convert(varchar, getdate(), 106) -- dd mon yyyy 
SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy 
SELECT convert(varchar, getdate(), 108) -- hh:mm:ss 
SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM) 
             -- Oct 2 2008 11:02:44:013AM 
SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy 
SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd 
SELECT convert(varchar, getdate(), 112) -- yyyymmdd 
SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm 
             -- 02 Oct 2008 11:02:07:577  
SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h) 
SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) 
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm 
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm 
             -- 2008-10-02T10:52:47.513 
-- SQL create different date styles with t-sql string functions 
SELECT replace(convert(varchar, getdate(), 111), '/', ' ') -- yyyy mm dd 
SELECT convert(varchar(7), getdate(), 126)     -- yyyy-mm 
SELECT right(convert(varchar, getdate(), 106), 8)   -- mon yyyy 

The Source

Questions connexes