web-dev-qa-db-fra.com

Comment obtenir une date représentant le premier jour d'un mois?

J'ai besoin de fonctionnalités dans un script qui me permettront d'insérer des dates dans un tableau.

De quoi SQL ai-je besoin pour insérer une date au format

01/08/2010 00:00:00

où la date est le premier jour du mois en cours. De quoi ai-je besoin pour modifier la commande afin de pouvoir spécifier la valeur du mois? Merci

33
DaveDev

La meilleure et la plus simple consiste à utiliser:

SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0)

Il suffit de remplacer GETDATE () par la date dont vous avez besoin. 

76
Icemanind

La réponse acceptée fonctionne et peut être plus rapide, mais SQL 2012 et versions ultérieures ont une méthode plus facile à comprendre:

SELECT cast(format(GETDATE(), 'yyyy-MM-01') as Date)
8
jmoreno
select cast(cast(datepart(year,getdate()) as char(4)) 
+ '/' 
+ cast(datepart(month,getdate()) as char(2))
+ '/01' as datetime)
3
Joe Stefanelli

Voici un moyen très simple de le faire (avec SQL 2012 ou ultérieur)

datefromparts(year(getdate()),month(getdate()),1)

vous pouvez aussi facilement obtenir le dernier jour du mois en utilisant 

eomonth(getdate())
2
iliketocode

SELECT DATEADD (jour, 1-DATEpart (jour, GETDATE ()), GETDATE ())

1
Beth
SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0)

Cela a parfaitement fonctionné. J'ai en fait ajouté une déclaration de cas. Merci pour le post:

SELECT Case(DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0) as Date)
0
Todd181

je pense que normalement convertit string en MM/JJ/AA HH: mm: ss, vous devez utiliser 08/01/2010 00:00:00

Désolé, j'ai mal compris la question, cherchant à voir si vous pouvez changer l'ordre des chaînes.

C'est peut-être ce que vous voulez:

declare @test as date

select @test = CONVERT(date, '01/08/2010 00:00:00', 103)
select convert(varchar(15), @test, 106)
0
BlackICE

Modifié à partir de ce link . Cela retournera sous forme de chaîne, mais vous pouvez le modifier si nécessaire pour renvoyer votre type de données datetime.

SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(GetDate())-1),GetDate()),101) 
0
AllenG
SELECT  CAST(FLOOR(CAST(DATEADD(d, 1 - DAY(GETDATE()), GETDATE()) AS FLOAT)) AS DATETIME)
0
Quassnoi