当前位置:  开发笔记 > 编程语言 > 正文

为什么所有月份都不打印?

如何解决《为什么所有月份都不打印?》经验,为你挑选了1个好方法。

当我执行下面的查询

DECLARE @I INT=1
while(@I<13)
BEGIN
PRINT DATENAME(MONTH,@I)
PRINT @I
SET @I=@I+1
END

我有输出像:

January
1
January
2
January
3
January
4
January
5
January
6
January
7
January
8
January
9
January
10
January
11
January
12

为什么所有月份名称都不打印在上述结果中?任何人都可以指明原因吗?



1> Lukasz Szozd..:

因为当您使用DATENAME(MONTH,@I) 值1,2,3,4 ...被隐式转换为DATETIME:

SELECT CAST(1 AS DATETIME)
-- 1900-01-02 00:00:00

1 - Jan  2 1900 12:00AM
2 - Jan  3 1900 12:00AM
3 - Jan  4 1900 12:00AM
...
12 - Jan 13 1900 12:00AM

并且DATENAME对于月份来说总是如此January

你可以DATEADD用来获得所有月份:

DECLARE @I INT=1
while(@I<13)
BEGIN
  PRINT DATENAME(MONTH, DATEADD(MONTH, @i-1, '2000-01-01'))
  PRINT @I
  SET @I=@I+1
END

LiveDemo

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有