如何使用前导0';什么是SQL?(例如9=>;09)

如何使用前导0';什么是SQL?(例如9=>;09),sql,tsql,Sql,Tsql,如果今天是12月9日,上面会打印“9” 我想打印“09”。如何进行此操作?将其填充为00,然后右转2: DECLARE @day CHAR(2) SET @day = DATEPART(DAY, GETDATE()) PRINT @day 他把舌头从脸颊上移开后说,要整洁得多 通常,当您必须开始在SQL中执行这类操作时,您需要从Cani切换到HeadI。使用您自己的方法 这是一种用于左填充任何内容的通用方法。其概念是使用REPLICATE创建一个版本,该版本只不过是填充值。然后将其与实际值

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


我想打印“09”。如何进行此操作?

将其填充为00,然后右转2:

DECLARE @day CHAR(2)

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

PRINT @day
他把舌头从脸颊上移开后说,要整洁得多

通常,当您必须开始在SQL中执行这类操作时,您需要从Cani切换到HeadI。

使用您自己的方法 这是一种用于左填充任何内容的通用方法。其概念是使用REPLICATE创建一个版本,该版本只不过是填充值。然后将其与实际值连接起来,如果数据可为null,则使用isnull/coalesce调用。现在,您有了一个字符串,它的大小是目标大小的两倍,正好是目标长度,或者介于两者之间。现在只需去掉最右边的N个字符,就有了一个左填充字符串

Select Replicate('0',2 - DataLength(Convert(VarChar(2),DatePart(DAY, GetDate()))) + Convert(VarChar(2),DatePart(DAY, GetDate())
土生土长 该函数提供了获取预格式化日期的各种方法。格式103指定了
dd
,这意味着保留前导零,因此只需将前2个字符切掉

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

使用SQL Server的日期样式预格式化日期值

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

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
挑选 右('0000'+cast(datepart(year,GETDATE())作为varchar(4)),4)+'-'+' 右('00'+将datepart(month,GETDATE())转换为varchar(2)),2)+'-'++
对于SQL Server 2012及更高版本,右('00'+强制转换(datepart(day,getdate())为varchar(2)),2)为YearMonthDay,前导零:

SELECT RIGHT('0' 
             + CONVERT(VARCHAR(2), Month( column_name )), 2) 
FROM   table 
 SELECT FORMAT(GETDATE(),'MM') 
没有:

SELECT RIGHT('0' 
             + CONVERT(VARCHAR(2), Month( column_name )), 2) 
FROM   table 
 SELECT FORMAT(GETDATE(),'MM') 
领先0天

SELECT    MONTH(GETDATE())

SQL Server 2012+(适用于月份和日期):

如果您决定今年也要参加,请使用:

SELECT FORMAT(GetDate(),'MMdd')

天哪,那代码看起来太可怕了!哈哈。但是谢谢。我会尝试一下。我已经更新了它,因为我在GETDATE()中做了-1-今天是第10天,我想要第9天,这样我就可以测试它了…使用更新的代码。出于好奇,NVARCHAR和双零有什么特殊原因吗?使用CHAR不起作用,你可以使用VARCHAR或NVARCHAR。我通常使用nvarchar,因为我使用unicode,这是一种习惯。每当我填充时,我总是使用与答案相同的字符数-这只是个人偏好,如果你愿意,你可以只使用一个零。好吧,我认为这很聪明!这是在哪里使用的?理想情况下,如果可能的话,这应该在表示层中完成,但我相信我们在某些时候都做过类似的事情……我有一个存储过程,在文件系统中创建一个文件夹结构,然后我使用bcp实用程序进行查询,生成一些文本文件。文件夹和文本文件的名称与日期相关。因此,母文件夹将是2012年(这一年)。然后\2012\201212\20121210\20121210 filename.txt看看这个ISO格式112可能会让事情变得更简单。复制!!这就是我要找的词…我想lpad,pad,我一辈子都记不起来了:)我更喜欢你的版本,因为转换只调用了一次。@twoleggedhorse是的,现在是2016:)大多数人都没有最新版本的SQL,很多都会在2008年或更短的时间内,因此,当答案只适用于特定版本时,让他们知道这一点很重要。作为一个在工作中被困在2008 R2上的人,当人们告诉我他们的代码适用于哪个版本的SQL server时,我总是很感激。我怀疑你被否决了,因为这是一个质量相当低的答案,你甚至没有把它放在代码块中。另外,我也不完全确定你为什么要用零来填充年份,但也许我遗漏了一些东西。
DECLARE @day CHAR(2)

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

print @day
SELECT FORMAT(GetDate(),'MMdd')
SELECT FORMAT(GetDate(),'yyyyMMdd')