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

RJ.*_*RJ. 50 sql t-sql

DECLARE @day CHAR(2)

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

PRINT @day
Run Code Online (Sandbox Code Playgroud)

如果今天是12月9日,上面将打印"9".

我想打印"09".我该怎么做呢?

two*_*rse 87

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

DECLARE @day CHAR(2)

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

print @day
Run Code Online (Sandbox Code Playgroud)

  • geeze,那段代码看起来很恐怖!哈哈.但是谢谢.会尝试一下. (6认同)
  • 出于好奇,NVARCHAR和双零的任何特殊原因? (3认同)
  • 使用CHAR不起作用,您可以使用VARCHAR或NVARCHAR.我通常使用nvarchar,因为我使用unicode,这是一种习惯的力量.每当我填充时,我总是使用相同数量的字符作为答案 - 只是个人偏好,如果你愿意,你可以只使用一个零. (2认同)

小智 23

使用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
Run Code Online (Sandbox Code Playgroud)


Saj*_*kar 20

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

 SELECT FORMAT(GETDATE(),'MM') 
Run Code Online (Sandbox Code Playgroud)

无:

SELECT    MONTH(GETDATE())
Run Code Online (Sandbox Code Playgroud)

  • 大多数人没有最新版本的SQL,很多人仍然会在2008年或更少,所以当他们的答案只适用于特定版本时,让他们知道很重要. (3认同)
  • 作为在工作中坚持使用 2008 R2 的人,当人们让我知道他们的代码适用于哪个版本的 SQL 服务器时,我总是很感激。 (2认同)

小智 9

试试这个 :

SELECT CONVERT(varchar(2), GETDATE(), 101)
Run Code Online (Sandbox Code Playgroud)


小智 6

前0天

SELECT FORMAT(GetDate(), 'dd')
Run Code Online (Sandbox Code Playgroud)