得到上个月的记录

时间:2014-06-09 13:13:52

标签: sql sql-server

sql 2005服务器

获取上个月的记录

Date        product
24-05-2014  ball
25-05-2014  bat
01-06-2014  hat

我需要

Date        Product
24-05-2014  ball
25-05-2014  bat

declare @ex datetime
set @ex '06-01-2014'

select * from tabl where DATENAME(m,DATEADD(m,0,Date)) =DATENAME(m, DATEADD(m,0, @ex))- it works
select * from tabl where DATENAME(m,DATEADD(m,0,Date)) =DATENAME(m, DATEADD(m,-1,@ex))-not works

2 个答案:

答案 0 :(得分:1)

我的示例代码(2008年测试)。我不知道2005年的YEAR和MOTH功能是否需要使用一些字符串函数从datetime转换为字符串中提取日期/月份部分

declare @ex datetime = '2014-01-01'
declare @prev_year int
declare @prev_month int

set @prev_year = year(dateadd(month, -1, @ex))
set @prev_month = month(dateadd(month, -1, @ex))

select * from tabl 
where year(Date) = @prev_year and month(Date) = @prev_month

答案 1 :(得分:0)

您在日期中使用dd-MM-yyyy格式,这是SQL Server中的varchar。 因此,您必须使用CONVERT

declare @ex varchar(10)
set @ex = '06-01-2014'

SELECT  DATENAME(m,DATEADD(m,0,GETDATE())),

 DATENAME(m, DATEADD(m,-1,CONVERT(date, @ex, 103)));

这会产生结果:

June | May

我认为你可以从这里找出解决方案。

注意:如果您使用declare @ex datetime,结果将产生June | December