T-SQL DATEDIFF MONTH 一月
T-SQL DATEDIFF MONTH January
这似乎是一个非常 simple/silly 的问题,但是,如果我在 1 月使用此代码,输出会是 12 月(如 1 月 - 1 = 12 月)吗?
SELECT DATENAME(MONTH, DATEDIFF(MONTH, -1, GETDATE()));
正如所写,没有。截至目前,它只会 return November
。这是因为您使用的是 DATEDIFF
而不是 DATEADD
.
您可以通过选择 DATEDIFF
部分了解它为什么这样做:
SELECT DATEDIFF(MONTH, -1, '2017-01-01')
1405
和Select DateName(Month, 1405)
returns November
.
但是,这应该是您想要使用的:
SELECT DATENAME(MONTH, DATEADD(MONTH, -1, GETDATE()));
是的,使用它会 return December
:
SELECT DATENAME(MONTH, DATEADD(MONTH, -1, '2017-01-01'));
December
您对这两个功能的使用不正确。我建议查看联机帮助以获取更多详细信息,但这里是对您所做操作的解释...
DATEDIFF()
的最后两个参数都是DATETIME
s.
- 它找出这两个日期之间的差异。
- 以年、月、日、小时等为单位
因此,当您提供 -1
作为第一个日期时,它隐含地 CAST
到 DATETIME
.
- 碰巧,
0
是 1970-Jan-01 @ 00:00:00
- 也就是说
-1
是1969-Dec-31 @ 00:00:00
。
- 你做到了
How many months are there between 1969-Dec-31 and now?
- 当前1405个月
DATENAME()
的第二个参数也是一个DATETIME
.
- 它returns那个日期的月份名称
- 或星期几等
因此,当您提供 1405
作为 DATETIME
参数时,它也会被隐式转换。
- 那是
1st Jan 1970
之后的 1405 天
- 也就是
6th Nov 1973
- 所以
DATENAME()
returns'November'
您可能只是想从某个特定日期中抽出一个月,然后得到它的名字。
DATENAME( MONTH, DATEADD( MONTH, -1, getDate() ) )
这似乎是一个非常 simple/silly 的问题,但是,如果我在 1 月使用此代码,输出会是 12 月(如 1 月 - 1 = 12 月)吗?
SELECT DATENAME(MONTH, DATEDIFF(MONTH, -1, GETDATE()));
正如所写,没有。截至目前,它只会 return November
。这是因为您使用的是 DATEDIFF
而不是 DATEADD
.
您可以通过选择 DATEDIFF
部分了解它为什么这样做:
SELECT DATEDIFF(MONTH, -1, '2017-01-01')
1405
和Select DateName(Month, 1405)
returns November
.
但是,这应该是您想要使用的:
SELECT DATENAME(MONTH, DATEADD(MONTH, -1, GETDATE()));
是的,使用它会 return December
:
SELECT DATENAME(MONTH, DATEADD(MONTH, -1, '2017-01-01'));
December
您对这两个功能的使用不正确。我建议查看联机帮助以获取更多详细信息,但这里是对您所做操作的解释...
DATEDIFF()
的最后两个参数都是DATETIME
s.
- 它找出这两个日期之间的差异。
- 以年、月、日、小时等为单位
因此,当您提供 -1
作为第一个日期时,它隐含地 CAST
到 DATETIME
.
- 碰巧,
0
是1970-Jan-01 @ 00:00:00
- 也就是说
-1
是1969-Dec-31 @ 00:00:00
。 - 你做到了
How many months are there between 1969-Dec-31 and now?
- 当前1405个月
DATENAME()
的第二个参数也是一个DATETIME
.
- 它returns那个日期的月份名称
- 或星期几等
因此,当您提供 1405
作为 DATETIME
参数时,它也会被隐式转换。
- 那是
1st Jan 1970
之后的 1405 天
- 也就是
6th Nov 1973
- 所以
DATENAME()
returns'November'
您可能只是想从某个特定日期中抽出一个月,然后得到它的名字。
DATENAME( MONTH, DATEADD( MONTH, -1, getDate() ) )