如何获得在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