怎样取上个月指定的时间段?该怎么处理

怎样取上个月指定的时间段?
我要取上个月1-30天内的数据,这个时间要怎么取?
select dateadd(dd,-29,dateadd(dd,-day(getdate()),getdate()))
select dateadd(dd,-day(getdate()),getdate())
  
但是发现运行结果分别为
2014-07-02 10:31:13.700
2014-07-31 10:31:13.700

现在要怎样把结果修正为
2014-07-02 00:00:00
2014-07-31 23:59:59

注意,一定要转换成时间类型,因为我还要用between的。

------解决方案--------------------
select DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())-1,0) AS '上月第一天'  
,CONVERT(VARCHAR(10),DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,GETDATE()),GETDATE())),23)+' 23:59:59.997' AS '上月最后一天'  

/*
上月第一天                   上月最后一天
----------------------- -----------------------
2014-07-01 00:00:00.000 2014-07-31 23:59:59.997
*/

------解决方案--------------------
select DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())-1,0) AS '上月第一天'  
,DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,GETDATE()), 0)) AS  '上月最后一天'  
 
/*
上月第一天                   上月最后一天
----------------------- -----------------------
2014-07-01 00:00:00.000 2014-07-31 23:59:59.997
*/
------解决方案--------------------
--判断同月
--A.如果字段是日期类型
WHERE Convert(varchar(7),dt,120) = Convert(varchar(7),GetDate(),120)
--B.如果字段是字符型
WHERE SubString(dt,7) = Convert(varchar(7),GetDate(),120)