获得本月2位数字

时间:2013-02-20 09:06:35

标签: sql sql-server sql-server-2008 tsql

我有一个整数列“月” 我希望每月获得2位数字。

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

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

有人有建议吗?

12 个答案:

答案 0 :(得分:68)

有不同的方法可以做到这一点

  • 使用 RTRIM 并指定范围

喜欢

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

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

请参阅Fiddle

可能还有其他方法可以解决这个问题。

答案 1 :(得分:55)

功能

FORMAT(date,'MM') 

将以两位数完成工作。

答案 2 :(得分:13)

Pinal Dave有一篇很好的文章,其中有一些关于如何add trailing 0s to SQL numbers的例子。

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

SELECT RIGHT('00' + CAST(DATEPART(mm, @date) AS varchar(2)), 2)

答案 3 :(得分:6)

另一个简单的伎俩:

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

答案 4 :(得分:3)

DATEPART

的替代方案
SELECT LEFT(CONVERT(CHAR(20), GETDATE(), 101), 2)

答案 5 :(得分:2)

通过首先将值转换为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))

答案 6 :(得分:2)

只需使用:

SELECT RIGHT('0' + CAST(MONTH(@Date) AS NVARCHAR(2)), 2)

答案 7 :(得分:1)

尝试:

select right ('0'+convert(nvarchar(2), DATEPART(mm, getdate())),2 )

答案 8 :(得分:1)

CONVERT(char(2),getdate(),101)

答案 9 :(得分:0)

对我而言,最快的解决方案是

DATE_FORMAT(CURDATE(),'%m')

答案 10 :(得分:0)

我的做法是:

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

内部“正确”功能的原因是为了防止SQL将其作为数学加法执行 - 这将使我们再次使用一位数。

答案 11 :(得分:0)

SELECT REPLACE(CONVERT(varchar, MONTH(GetDate()) * 0.01), '0.', '')