我想选择价值=201301
select getdate(), cast(datepart(year, getdate()) as varchar(4))+cast(datepart(MONTH, getdate()) as varchar(2))
它返回20131
这样做的正常方法是什么?
我想选择价值=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)
实际上,这是获得所需内容的正确方法,除非您可以使用 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)
.
一种更有效的方法,它使用整数数学而不是字符串/varchars,这将导致 int 类型而不是字符串类型是:
SELECT YYYYMM = (YEAR(GETDATE()) * 100) + MONTH(GETDATE())
在年份的右侧添加两个零,然后将月份添加到添加的两个零。
您可以将日期转换为多种格式,例如:
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
CONVERT(NVARCHAR(10), DATE_OF_DAY, 3) => 15/09/16
语法:
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
在您的情况下,我刚刚通过 nvarchar(6) 转换并限制大小,如下所示:
CONVERT(NVARCHAR(6), DATE_OF_DAY, 112) => 201609
现在是第 1 个月,所以你得到了一个期望值。根据这个答案,您必须将月份(1-> 01)归零:How do I convert an int to a zero padded string in T-SQL?