web-dev-qa-db-fra.com

Comment puis-je obtenir le mois et le jour avec les principaux 0 en SQL? (par exemple 9 => 09)

DECLARE @day CHAR(2)

SET @day = DATEPART(DAY, GETDATE())

PRINT @day

Si aujourd'hui était le 9 décembre, ce qui précède afficherait "9".

Je veux imprimer "09". Comment puis-je faire cela?

45
Rj.

Tapotez-le avec 00 et prenez à droite 2:

DECLARE @day CHAR(2)

SET @day = RIGHT('00' + CONVERT(NVARCHAR(2), DATEPART(DAY, GETDATE())), 2)

print @day
79
twoleggedhorse

Utilisez les styles de date SQL Server pour pré-formater vos valeurs de date.

SELECT
    CONVERT(varchar(2), GETDATE(), 101) AS monthLeadingZero  -- Date Style 101 = mm/dd/yyyy
    ,CONVERT(varchar(2), GETDATE(), 103) AS dayLeadingZero   -- Date Style 103 = dd/mm/yyyy
22
Michael Dawson

Pour SQL Server 2012 et versions supérieures, avec des zéros non significatifs:

 SELECT FORMAT(GETDATE(),'MM') 

sans pour autant:

SELECT    MONTH(GETDATE())
17
Sajjan Sarkar

Essaye ça : 

SELECT CONVERT(varchar(2), GETDATE(), 101)
8
Andrew

Leader 0 jour

SELECT FORMAT(GetDate(), 'dd')
4
Chris
Select Replicate('0',2 - DataLength(Convert(VarChar(2),DatePart(DAY, GetDate()))) + Convert(VarChar(2),DatePart(DAY, GetDate())

Bien plus beau, dit-il après avoir retiré la langue de la joue.

Habituellement, lorsque vous devez commencer à faire ce genre de chose en SQL, vous devez basculer de can I à can I.

1
Tony Hopkinson
SELECT RIGHT('0' 
             + CONVERT(VARCHAR(2), Month( column_name )), 2) 
FROM   table 
0
Dss

Rouler votre propre méthode

C'est une approche générique pour tout rembourrage à gauche. Le concept est d'utiliser REPLICATE pour créer une version qui n'est autre que la valeur complétée. Puis concaténez-le avec la valeur réelle, en utilisant un appel isnull/coalesce si les données sont NULLable. Vous avez maintenant une chaîne qui double la taille cible pour atteindre exactement la longueur cible ou entre les deux. Maintenant, il suffit de vous séparer des N caractères les plus à droite et vous avez une chaîne rembourrée à gauche.

SELECT RIGHT(REPLICATE('0', 2) + CAST(DATEPART(DAY, '2012-12-09') AS varchar(2)), 2) AS leftpadded_day

Aller natif

La fonction CONVERT propose différentes méthodes pour obtenir des dates préformatées. Le format 103 spécifie dd, ce qui signifie que le zéro n'est pas majuscule; il suffit donc de découper les 2 premiers caractères.

SELECT CONVERT(char(2), CAST('2012-12-09' AS datetime), 103) AS convert_day
0
billinkc