72

我有一个整数列“月份”,我想获得 2 位数的月份。

这是我尝试过的: DATEPART(mm, @Date)

它在 1 月到 9 月返回一位数 我使用的是 SQL Server 2008

有人有建议吗?

4

12 回答 12

100

功能

FORMAT(date,'MM') 

将以两位数完成这项工作。

于 2014-07-11T10:36:43.700 回答
86

有不同的方法

  • 使用RTRIM并指定范围

SELECT RIGHT('0' + RTRIM(MONTH('12-31-2012')), 2); 
  • 将日期转换为文本后,使用Substring仅提取月份部分

SELECT SUBSTRING(CONVERT(nvarchar(6),getdate(), 112),5,2)

小提琴

可能还有其他方法可以得到这个。

于 2013-02-20T09:28:33.047 回答
17

Pinal Dave 有一篇很好的文章,其中包含一些关于如何将尾随 0 添加到 SQL 数字的示例。

一种方法是使用该RIGHT函数,这将使语句类似于以下内容:

SELECT RIGHT('00' + CAST(DATEPART(mm, @date) AS varchar(2)), 2)
于 2013-02-20T09:12:19.480 回答
9

另一个简单的技巧:

SELECT CONVERT(char(2), cast('2015-01-01' as datetime), 101) -- month with 2 digits
SELECT CONVERT(char(6), cast('2015-01-01' as datetime), 112) -- year (yyyy) and month (mm)

输出:

01
201501
于 2015-12-15T13:42:29.093 回答
4

转换(字符(2),getdate(),101)

于 2017-07-13T10:21:10.827 回答
3

通过首先将其强制转换为 varchar 检查值是否介于 1 和 9 之间,在其前面附加 0

select case when DATEPART(month, getdate()) between 1 and 9 
then '0' else '' end + cast(DATEPART(month, getdate()) as varchar(2))
于 2013-02-20T09:10:02.147 回答
3

替代DATEPART

SELECT LEFT(CONVERT(CHAR(20), GETDATE(), 101), 2)
于 2013-02-20T09:10:50.270 回答
2

对我来说,最快的解决方案是

DATE_FORMAT(CURDATE(),'%m')
于 2016-02-08T19:46:50.033 回答
2

简单地可以使用:

SELECT RIGHT('0' + CAST(MONTH(@Date) AS NVARCHAR(2)), 2)
于 2017-01-18T17:40:47.333 回答
1

尝试:

select right ('0'+convert(nvarchar(2), DATEPART(mm, getdate())),2 )
于 2013-02-20T09:12:54.110 回答
1

我的做法是:

right('0'+right(datepart(month,[StartDate]),2),2)

内部“正确”函数的原因是为了防止 SQL 将其作为数学添加来执行 - 这将使我们再次留下一位数字。

于 2017-03-17T12:01:57.827 回答
0
SELECT REPLACE(CONVERT(varchar, MONTH(GetDate()) * 0.01), '0.', '')
于 2020-05-22T17:00:45.783 回答