将日期转换为YYYYMM格式

时间:2013-01-08 14:58:22

标签: sql sql-server tsql

我想选择值= 201301

select getdate(), cast(datepart(year, getdate()) as varchar(4))+cast(datepart(MONTH, getdate()) as varchar(2))

返回20131

这样做的正常方法是什么?

7 个答案:

答案 0 :(得分:84)

SELECT CONVERT(nvarchar(6), GETDATE(), 112)

答案 1 :(得分:45)

SELECT LEFT(CONVERT(varchar, GetDate(),112),6)

答案 2 :(得分:11)

我知道这是一个老话题,但如果您的SQL server版本高于2012年。

还有另一个简单的选项可以选择,FORMAT功能。

SELECT FORMAT(GetDate(),'yyyyMM')

sqlfiddle

答案 3 :(得分:2)

实际上,除非您可以使用MS SQL 2014(最终为日期时间启用自定义格式字符串),否则此 是获取所需内容的正确方法。

要获得yyyymm而不是yyyym,您可以使用这个小技巧:

select 
 right('0000' + cast(datepart(year, getdate()) as varchar(4)), 4)
 + right('00' + cast(datepart(month, getdate()) as varchar(2)), 2)

它比获取convert(..., 112)的部分内容更快,更可靠。

答案 4 :(得分:1)

您可以使用多种格式转换日期,例如:

CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
CONVERT(NVARCHAR(10), DATE_OF_DAY, 3) => 15/09/16

语法:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
  • 代码是一个整数,这里3是没有世纪的第三个格式,如果你想要世纪只需将代码更改为103.

在您的情况下,我刚刚通过nvarchar(6)转换并限制大小:

CONVERT(NVARCHAR(6), DATE_OF_DAY, 112) => 201609

详情请见:http://www.w3schools.com/sql/func_convert.asp

答案 5 :(得分:0)

一个更有效的方法,使用整数数学而不是字符串/ varchars,这将导致int类型而不是字符串类型:

SELECT YYYYMM = (YEAR(GETDATE()) * 100) + MONTH(GETDATE())

在年份的右侧添加两个零,然后将月份添加到添加的两个零。

答案 6 :(得分:-1)

这是第1个月,所以你得到了预期的价值。根据这个答案,你必须按月进行zeropad(1 - > 01):How do I convert an int to a zero padded string in T-SQL?