SQL Server SQL获取上个月(也在一月份)

piah890a  于 2023-01-29  发布在  其他
关注(0)|答案(6)|浏览(281)

你好我正在寻找简单的方法,如何从上个月获得数据。我得到这个代码,但它在一月不工作(结果是12 2021,我需要12 2020)

select month(dateadd(month,-1,getdate())), year(getdate())
vcudknz3

vcudknz31#

假设您有某种类型的日期列。
在SQL Server中,您可以使用datediff() * 表示 * 此概念:

where datediff(month, datecol, getdate()) = 1

然而,这不是“sargable”,这意味着它阻止了索引的使用。因此,我建议:

where datecol < datefromparts(year(getdate()), month(getdate()), 1) and
      datecol >= dateadd(month, 1, datefromparts(year(getdate()), month(getdate()), 1))

如果您只需要上个月的第一天,可以用途:

dateadd(month, 1, datefromparts(year(getdate()), month(getdate()), 1))
von4xj4u

von4xj4u2#

试试这个

select CASE WHEN month(getdate())>1 THEN  month(getdate())-1   ELSE 12   END ,

月份(获取日期())〉1则年份(获取日期())否则年份(获取日期())结束

yhuiod9q

yhuiod9q3#

使用下面给出的答案:How can I select the first day of a month in SQL?

SELECT dateadd(month,-1,DATEADD(month, DATEDIFF(month, 0, getdate()), 0)) as previousmonth;

输出:2020年12月1日00:00:00.000

d7v8vwbk

d7v8vwbk4#

我可以使用FORMAT function提供下一个查询:

SELECT 
    -- get current day in previous month
    FORMAT(dateadd(month, -1, getdate()), 'yyyy-MM-dd') as current_previousmonth,
    -- get first of previous month
    FORMAT(dateadd(month, -1, getdate()), 'yyyy-MM-01') as first_previousmonth,
    -- previous month without date
    FORMAT(dateadd(month, -1, getdate()), 'yyyy-MM') as previousmonth;

test T-SQL here

ie3xauqp

ie3xauqp5#

给你!

select dateadd(mm,-1,eomonth(getdate())) as [Previous Month]

结果:

Previous Month
--------------
2020-12-31

您还可以使用CONVERT()FORMAT()函数来根据需要格式化日期。

axr492tv

axr492tv6#

请尝试SELECT格式(日期添加(月,-1,获取日期()),'月/年');
它会给予你上个月和年。如果你要比较现有表中的日期列,那么你也需要日期部分,因为你想知道哪一年的12月是上个月。但是如果你不想要年,那么调整'MM/yyyy'部分来满足你的目的。

相关问题