如何在SQL中获得前导0的月份和日期? (例如9 => 09)

时间:2012-12-10 15:37:18

标签: sql tsql

DECLARE @day CHAR(2)

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

PRINT @day

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

我想打印“09”。我该怎么做呢?

11 个答案:

答案 0 :(得分:87)

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

DECLARE @day CHAR(2)

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

print @day

答案 1 :(得分:22)

使用SQL Server日期样式预先设置日期值的格式。

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

答案 2 :(得分:17)

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

 SELECT FORMAT(GETDATE(),'MM') 

<强>不

SELECT    MONTH(GETDATE())

答案 3 :(得分:9)

试试这个:

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

答案 4 :(得分:4)

领先0天

SELECT FORMAT(GetDate(), 'dd')

答案 5 :(得分:1)

Select Replicate('0',2 - DataLength(Convert(VarChar(2),DatePart(DAY, GetDate()))) + Convert(VarChar(2),DatePart(DAY, GetDate())

他说,从脸颊上取下舌头后,他说得更加整洁。

通常当您必须在SQL中开始执行此类操作时,您需要从我可以切换到我应该这样做。

答案 6 :(得分:0)

滚动您自己的方法

这是左边填充任何内容的通用方法。这个概念是使用REPLICATE来创建一个只有填充值的版本。然后,如果数据为NULLable,则使用isnull / coalesce调用将其与实际值连接。您现在有一个字符串,其目标大小是目标长度的两倍,或者介于两者之间。现在只需剪掉N个最右边的角色,你就会有一个左边填充的字符串。

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

原生

CONVERT函数提供了各种获取预格式化日期的方法。格式103指定dd,这意味着保留前导零,因此需要做的就是切掉前两个字符。

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

答案 7 :(得分:0)

SELECT RIGHT('0' 
             + CONVERT(VARCHAR(2), Month( column_name )), 2) 
FROM   table 

答案 8 :(得分:0)

DECLARE @day CHAR(2)

SET @day = right('0'+ cast(day(getdate())as nvarchar(2)),2)

print @day

答案 9 :(得分:0)

SQL Server 2012 + (两个月日):

SELECT FORMAT(GetDate(),'MMdd')

如果您也决定要年份,请使用:

SELECT FORMAT(GetDate(),'yyyyMMdd')

答案 10 :(得分:-1)

选择     对(&#39; 0000&#39; + cast(datepart(year,GETDATE())为varchar(4)),4)+&#39; - &#39; + +     对(&#39; 00&#39; + cast(datepart(月,GETDATE())为varchar(2)),2)+&#39; - &#39; + +     对(&#39; 00&#39; + cast(datepart(day,getdate())为varchar(2)),2)为YearMonthDay