Existe-t-il quelque chose de similaire à DATEFROMPARTS(year, month, day)
dans SQL Server 2008? Je veux créer une date en utilisant l'année et le mois en cours, mais mon propre jour du mois. Cela doit être fait sur une seule ligne afin d'être utilisé dans une formule de colonne calculée.
Par exemple (je ne sais pas si cela fonctionne parce que je n'ai pas SQL Server 2012):
DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 3)
Existe-t-il un moyen de le faire dans SQL Server 2008?
DATEFROMPARTS Semble uniquement disponible dans SQL Server 2012 (lien)
En utilisant le 3
à partir de votre exemple, vous pouvez faire ceci:
dateadd(dd, 3 -1, dateadd(mm, datediff(mm,0, current_timestamp), 0))
Il fonctionne en trouvant le nombre de mois depuis la date de l'époque, en ajoutant ces mois à la date de l'époque, puis en ajoutant le nombre de jours souhaité à ce résultat précédent. Cela semble compliqué, mais il repose sur ce qui était la manière canonique de tronquer les dates avant le type Date
(pas DateTime) ajouté à Sql Server 2008.
Vous allez probablement voir d'autres réponses suggérant des chaînes de date de construction. Je vous exhorte à éviter cette technique. L'utilisation de chaînes est susceptible d'être beaucoup plus lente, et il existe des écueils potentiels avec des classements/formats de dates alternatifs.
Vous pouvez utiliser quelque chose comme ceci pour créer votre propre datetime:
DECLARE @year INT = 2012
DECLARE @month INT = 12
DECLARE @day INT = 25
SELECT CAST(CONVERT(VARCHAR, @year) + '-' + CONVERT(VARCHAR, @month) + '-' + CONVERT(VARCHAR, @day)
AS DATETIME)
CREATE FUNCTION DATEFROMPARTS
(
@year int,
@month int,
@day int
)
RETURNS datetime
AS
BEGIN
declare @d datetime
select @d = CAST(CONVERT(VARCHAR, @year) + '-' + CONVERT(VARCHAR, @month) + '-' + CONVERT(VARCHAR, @day) AS DATETIME)
RETURN @d
END
GO