68
DECLARE @day CHAR(2)

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

PRINT @day

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

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

4

13 回答 13

106

用 00 填充它并取右 2:

DECLARE @day CHAR(2)

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

print @day
于 2012-12-10T15:41:56.353 回答
40

对于 SQL Server 2012 及更高版本,带有前导零:

 SELECT FORMAT(GETDATE(),'MM') 

没有:

SELECT    MONTH(GETDATE())
于 2016-06-09T21:01:36.440 回答
25

使用 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
于 2013-11-08T06:34:35.593 回答
10

试试这个 :

SELECT CONVERT(varchar(2), GETDATE(), 101)
于 2014-01-17T09:38:26.280 回答
6

领先0天

SELECT FORMAT(GetDate(), 'dd')
于 2017-03-29T16:13:32.383 回答
2

SQL Server 2012+(月日):

SELECT FORMAT(GetDate(),'MMdd')

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

SELECT FORMAT(GetDate(),'yyyyMMdd')
于 2019-12-18T15:53:08.047 回答
1
Select Replicate('0',2 - DataLength(Convert(VarChar(2),DatePart(DAY, GetDate()))) + Convert(VarChar(2),DatePart(DAY, GetDate())

干净得多,他在从脸颊上取下舌头后说。

通常当你必须开始在 SQL 中做这种事情时,你需要从 can I 切换到 should I。

于 2012-12-10T15:49:41.390 回答
1
SELECT RIGHT('0' 
             + CONVERT(VARCHAR(2), Month( column_name )), 2) 
FROM   table 
于 2014-09-11T14:41:15.523 回答
0

滚动你自己的方法

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

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

本地化

CONVERT函数提供了多种获取预格式化日期的方法。格式 103 指定dd保留前导零的方法,因此只需切掉前 2 个字符。

SELECT CONVERT(char(2), CAST('2012-12-09' AS datetime), 103) AS convert_day
于 2012-12-10T16:00:27.283 回答
0
DECLARE @day CHAR(2)

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

print @day
于 2019-06-11T09:56:08.130 回答
0

采用

CONVERT(CHAR(2), DATE_COLUMN, 101) 

获取带有 2 个字符的月份部分和

CONVERT(CHAR(2), DATE_COLUMN, 103)

白天。

于 2021-08-17T07:58:41.487 回答
0

如果这是你想要的,我可以建议这个用户定义的函数:

CREATE FUNCTION dbo.date_code (@my_date date) RETURNS INT
BEGIN;
    DECLARE @retval int;
    SELECT @retval = CAST(CAST(datepart(year,@my_date) AS nvarchar(4))
                        + CONVERT(CHAR(2),@my_date, 101)
                        + CONVERT(CHAR(2),@my_date, 103) AS int);
    RETURN @retval;
END
go

调用它:

SELECT dbo.date_code(getdate())

它从今天开始返回

20211129

于 2021-11-29T20:25:07.930 回答
-1

select right('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) as YearMonthDay

于 2016-04-06T09:41:19.943 回答