SQL返回上个月的所有结果
我正在尝试创建一个存储过程,该存储过程将始终根据输入的列DateEntered返回上个月的每张票证。然而,这一行似乎永远不会返回数据:SQL返回上个月的所有结果,sql,tsql,datetime,getdate,Sql,Tsql,Datetime,Getdate,我正在尝试创建一个存储过程,该存储过程将始终根据输入的列DateEntered返回上个月的每张票证。然而,这一行似乎永远不会返回数据: SELECT * FROM [Test].[dbo].[Tickets] INNER JOIN [Test].[dbo].[Movies] ON [Test].[dbo].[Tickets].[ConnectedTo] = [Test].[dbo].[Movies].[MovieID] WHERE [Test].[dbo].[Mov
SELECT *
FROM
[Test].[dbo].[Tickets]
INNER JOIN
[Test].[dbo].[Movies]
ON
[Test].[dbo].[Tickets].[ConnectedTo] = [Test].[dbo].[Movies].[MovieID]
WHERE
[Test].[dbo].[Movies].[Moviename] like '%K%'
AND [Test].[dbo].[Tickets].[DateEntered]= DATEADD(month, -1, GETDATE())
我相信它背后的逻辑是正确的,它将获取当前日期,将其更改为上个月,然后将该日期与输入的日期进行比较,尽管我可能会在这里出错。任何帮助都将不胜感激。只需将
=
替换为=
[Test].[dbo].[Tickets].[DateEntered]= DATEADD(month, -1, GETDATE())
您当前的条件将只查找
DateEntered
正好(以毫秒为单位)在一个月前的行:)我不确定选择的答案是否是实现这一点的最佳方法。如果您在本月13日运行报告,它只会提供从上个月13日到报告运行的准确时间的所有记录
所以你想要类似的东西。如果月份是一月
,您需要小心,因为这样我们就需要上一年以及上一个月
[Test].[dbo].[Tickets].[DateEntered] >= DATEADD(month, -1, GETDATE())
啊,我想这会很愚蠢!非常感谢你,尼纳德。
-- If the month is January we need to select the previous year, otherwise current year
IF MONTH(GETDATE()) = 1
BEGIN
YEAR([DateEntered]) = YEAR(DATEADD(y, -1, GETDATE())) AND MONTH([DateEntered]) = MONTH(DATEADD(m, -1, GETDATE())
END
ELSE
BEGIN
YEAR([DateEntered]) = YEAR(GETDATE()) AND MONTH([DateEntered]) = MONTH(DATEADD(m, -1, GETDATE())
END