如何获得在SQL中领先0的月份和date? (例如9 => 09)

DECLARE @day CHAR(2) SET @day = DATEPART(DAY, GETDATE()) PRINT @day 

如果今天是十二月九日,上面会打印“9”。

我想打印“09”。 我怎么去做这个?

用00填充,并采取正确的2:

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

使用SQL Server的date样式预先格式化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 

对于SQL Server 2012及更高版本,使用前导零:

  SELECT FORMAT(GETDATE(),'MM') 

无:

 SELECT MONTH(GETDATE()) 

尝试这个 :

 SELECT CONVERT(varchar(2), GETDATE(), 101) 
 Select Replicate('0',2 - DataLength(Convert(VarChar(2),DatePart(DAY, GetDate()))) + Convert(VarChar(2),DatePart(DAY, GetDate()) 

他整洁地说,从脸颊上取下舌头后说。

通常当你不得不在SQL中开始这样的事情时,你需要从我可以切换到应该我。

领先0天

 SELECT FORMAT(GetDate(), 'dd') 

滚动你自己的方法

这是左填充任何东西的通用方法。 这个概念是使用REPLICATE来创build一个只是填充值的版本。 然后将其与实际值进行连接,如果数据为NULLable,则使用isnull / coalesce调用。 您现在有一个string,其目标大小是目标长度的两倍,或者介于两者之间。 现在简单地去除N个最右边的字符,并且您有一个左填充string。

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

去当地

CONVERT函数提供了获取预格式化date的各种方法。 格式103指定了dd ,这意味着保留前导零,所以需要做的是分出前两个字符。

 SELECT CONVERT(char(2), CAST('2012-12-09' AS datetime), 103) AS convert_day 
 SELECT RIGHT('0' + CONVERT(VARCHAR(2), Month( column_name )), 2) FROM table 

('0000'+ cast(datepart(year,GETDATE())as varchar(4)),4)+' – '+ + right('00'+ cast(datepart(month,GETDATE())as varchar (2)),2)+' – '+ + right('00'+ cast(datepart(day,getdate())as varchar(2)),2)作为YearMonthDay