T-SQL Date函数,Integer值为date参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T-SQL Date函数,Integer值为date参数相关的知识,希望对你有一定的参考价值。
我试图修改遗留查询并遇到此代码块
select DATEADD(MONTH, DATEDIFF(MONTH, -1,getdate() )-1, 1)
但在我看来,dateadd和datediff函数需要一些日期参数来进行计算。但是这里DateDiff和DateAdd在Date参数的位置有一些整数值
例如,DATEDIFF(MONTH,-1,getdate()) - 1返回1431,这只是一个十进制值,但根据文档的代码块查找Date参数。
https://www.w3schools.com/sql/func_sqlserver_datediff.asp
同样在DateAdd的情况下
有人请分享一些解释
不幸的是,DATEADD
和DATEDIFF
被指定与datetime
(以及任何较新的datetime数据类型)一起使用。因此,他们继承了旧类型的许多肮脏,包括从implicit conversions到int
的datetime
被允许1。
0
转换为1900-01-01
。 -1
转换为1899-12-31
。 1
转换为1900-01-02
。简而言之,整数转换为1900-01-01之后“那么多”天。
但是让我们来看看你的代码。它计算了1899-12-31
的月份差异,然后减去一个,将相同数量的月份加到1900-01-02
上。这样的净效果是给你当前月份的第二个。
即使保持相同的结构,也有更简单的方法来编写它:
select DATEADD(MONTH, DATEDIFF(MONTH, 0, getdate() ), 1)
或者使用DATEFROMPARTS
,这是首选,因为它使你明确/明显地做了什么,并使用更现代的数据类型(date
)。
1你甚至不允许从int
到datetime2
的明确转换。因为,实际上,它没有意义。
以上是关于T-SQL Date函数,Integer值为date参数的主要内容,如果未能解决你的问题,请参考以下文章