繁体   English   中英

将日期转换为 YYYYMM 格式

[英]Convert date to YYYYMM format

我要 select 值 = 201301

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

它返回20131

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

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

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

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

SELECT FORMAT(GetDate(),'yyyyMM')

sqlfiddle

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

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

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

实际上,这获得所需内容的正确方法,除非您可以使用 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)更快、更可靠。

您可以将日期转换为多种格式,例如:

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

这是简单的格式

convert(varchar(6),getdate(),112)

选择格式(GETDATE(),'yyyyMM')作为'YYYYMM'

要获得此类值的格式修改,如果您想将其应用于整个列,则必须执行以下操作:

SELECT TO_DATE(变量-格式-u-wanna-change , 'YYYYMM') FROM table ;

但是,我不知道如何使用 output 添加列 u_u

现在是第 1 个月,所以你得到了一个期望值。 根据这个答案,您必须将月份(1-> 01)归零: How do I convert an int to a zero padded string in T-SQL?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM