web-dev-qa-db-fra.com

Arrondissement des dates au premier jour du mois

J'utilise SQL Server 2014 et je travaille avec une colonne de l'un de mes tableaux, qui répertorie les dates d'arrivée.

C'est dans le format suivant:

ArrivalDate
2015-10-17 00:00:00.000
2015-12-03 00:00:00.000

J'écris une requête qui extrait les données de la table ci-dessus, y compris la colonne ArrivalDate. Cependant, je devrai convertir les dates pour qu'elles deviennent le premier jour de leurs mois respectifs.

En d'autres termes, ma requête doit générer l'exemple ci-dessus comme suit:

2015-10-01 00:00:00.000
2015-12-01 00:00:00.000

J'ai besoin de cela pour pouvoir créer une relation avec ma table de dates dans mon modèle PowerPivot.

J'ai essayé cette syntaxe mais elle ne répond pas à mes exigences:

CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2]
9
user3115933

Si, par exemple, le 15 du mois donné, vous soustrayez 14:

SELECT 
    ArrivalDate, 
    DATEADD(DAY, -DATEPART(DAY, ArrivalDate) + 1, ArrivalDate) AS FirstDay
FROM [Your Table]

Pour éliminer la partie temps, vous pouvez utiliser CAST(... AS DATE).

10
Salman A

Utilisez FORMAT pour formater votre date.

DECLARE @date DATETIME = '2015-10-17 00:00:00.000'

SELECT FORMAT(@date, 'yyyy-MM-01 HH:mm:ss.fff')

Ou si vous ne voulez pas de temps partiel:

SELECT FORMAT(@date, 'yyyy-MM-01 00:00:00.000')

LiveDemo

7
Lukasz Szozda

À partir de SQL Server 2012, vous pouvez également utiliser DATEFROMPARTS :

SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1)
FROM   my_table
3
Code Different

Date de la ronde au premier du mois:

DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0)
1
Metaphor

Ou utilisez simplement la fonction ROUND - 

SELECT ROUND (TO_DATE ('27 -OCT-00 '),' YEAR ') "Nouvel An" DE DUAL;

Nouvel An

01-JAN-01

0
Ryan Kramer