2013-01-08 121 views
27

我要选择价值= 201301转换日期为YYYYMM格式

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

返回20131

什么是正常的方式做到这一点?

+0

欲了解更多信息,请查看此链接列表不同的日期格式sql服务器支持。 https://msdn.microsoft.com/en-us/library/ms187928.aspx –

回答

30
SELECT LEFT(CONVERT(varchar, GetDate(),112),6) 
61
SELECT CONVERT(nvarchar(6), GETDATE(), 112) 
+6

Upvotes for this answer!许多,许多upvotes! – Kermit

+0

这是非常优雅的解决方案!竖起大拇指 – Nightmaresux

+1

不错,简单。如果你想要的话,你也可以删除unicode:'SELECT CONVERT(varchar(6),GETDATE(),112)' – jumxozizi

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) gettings零件更快,更可靠。

1

你可以把你的日期在多种格式,例如:

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

Syntaxe:

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

在你的情况,我刚转换,并限制由nvarchar的尺寸(6)所示:

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

多见于:http://www.w3schools.com/sql/func_convert.asp

0

一种更有效的方法,使用整数运算,而不是串/ VARCHAR处理,这将导致一个int类型,而不是一个字符串类型是:

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

添加两个零到今年的右侧,然后每月增加还增加了两个零。