录入本月取出上月的方法

在MS-SQL中,如何获取上个月的月份
在MS-SQL中,如何获取上个月的月份?
例如,目前是2013年4月,则自动获得2013年3月;
如果目前是2013年1月,则自动获得2012年12月

 

 

trans_date >= CONVERT(VARCHAR(10), Dateadd(month, -3, Getdate()), 23)

丛单据日期开始倒推三个月内的

________________

datediff(month,trans_date,getdate())<=3

 取单据三个月内至今天的所有单据

3是datepart相差的单位值,所以用month时是表示三个月

 

 

 

------解决方案--------------------

convert(varchar(7),dateadd(dd,-day(dateadd(month,-1,cast(convert(varchar(5),年份)+'-'+convert(varchar(5),月份)+'-01 00:00:00:00' as datetime ) ))+1,dateadd(month,-1,cast(convert(varchar(5),年份)+'-'+convert(varchar(5),月份)+'-01 00:00:00:00' as datetime ))),23)  年月

结果为:2013-12
------解决方案--------------------
select convert(varchar(7),dateadd(month,-1,getdate()),120)
------解决方案--------------------
select replace(substring(convert(varchar(32),dateadd(month,-1,getdate()),120),1,7),'-','年')+'月'
------解决方案--------------------

select replace(convert(varchar(7),dateadd(month,-1,getdate()),120),'-','年')+'月'

_______________________________________

转贴:SQL中计算月初和月末

 

经过研究,最后确定了如下两条语句:

set @BeginDate = convert(varchar(8),getdate(),120)+’1 00:00:000′

set @EndDate = convert(varchar(20),dateadd(day,-1,convert(varchar(8),dateadd(m,1,getdate()),120)+’1 23:59:59′),120)

这样返回的数据是:2006-04-1 00:00:000
                                    2006-04-30 23:59:59

这样就得到了月初和月末的日期加上时间的表示了

 

___________________________________

录入的是'2014-02'需要知道上月最后一个月日期 2014-01-31


select datediff(day,'2014-02',dateadd(mm,1,'2014-02'))                     --得本月的天数                                   28
select  cast((substring('2014-02',1,8)+'-01')as datetime)-1                   --先把录入的数据给转换成日期格式然后再减1天 2014-01-31 00:00:00.000
select  convert(varchar(12),cast((substring('2014-02',1,8)+'-01')as datetime)-1,102) --由此得出录入的上月的日期  2014.01.31


取上月的 

select   dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate()))     /*上个月一号*/
select   dateadd(dd,-day(getdate()),getdate())                                                                      /* 上月月底 */
select   dateadd(dd,-day(getdate())+1,getdate())                                                                  /* 本月一号 */
select   dateadd(dd,-day(dateadd(month,1,getdate())),dateadd(month,1,getdate()))            /* 本月底 */
select   dateadd(dd,-day(dateadd(month,1,getdate()))+1,dateadd(month,1,getdate()))        /* 下月一号 */
select   dateadd(dd,-day(dateadd(month,2,getdate())),dateadd(month,2,getdate()))            /* 下月月底 */
_____________________________________________________________________

 

函数操作方法

:





返回本月的第一天
CREATE function dbo.Get_YearMonth
(@Date DateTime)
Returns datetime
as

Begin
 declare @ch varchar(10)
 SET @ch =convert(varchar(10),@Date,120)
 set @Date = cast((substring(@ch,1,8)+'01') as datetime)
 return @Date
End
GO

 

返回本月的最后一天
CREATE function dbo.Get_YearMonthLastDay
(@Date DateTime)
Returns DateTime
as

Begin
 declare @ch varchar(10)
 declare @ret_value datetime
 SET @ch =datediff(day,@Date,dateadd(MM,1,@Date))
 set @ch = cast((substring(convert(varchar(10),@Date,120),1,8)+@ch) as  varchar(10))
 set @ret_value = cast(@ch as datetime)
 return @ret_value
End
GO
--郑州-小霸王提供

_______

select   dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate()))     /*上个月一号*/
select   dateadd(dd,-day(getdate()),getdate())                                                                      /* 上月月底 */
select   dateadd(dd,-day(getdate())+1,getdate())                                                                  /* 本月一号 */   
select   dateadd(dd,-day(dateadd(month,1,getdate())),dateadd(month,1,getdate()))            /* 本月底 */
select   dateadd(dd,-day(dateadd(month,1,getdate()))+1,dateadd(month,1,getdate()))        /* 下月一号 */
select   dateadd(dd,-day(dateadd(month,2,getdate())),dateadd(month,2,getdate()))            /* 下月月底 */

如果不显示时间则  convert(nvarchar(10),时间,120)

--------------------------------------------------------------------------------


DECLARE @a DATETIME
SET @a='2009-07-8 13:24:09.437'
select @a as '当前日期',
DateName(year,@a) as '年',
DateName(month,@a) as '月',
DateName(day,@a) as '日',
DateName(dw,@a) as '星期',
DateName(week,@a) as '周数',
DateName(hour,@a) as '时',
DateName(minute,@a) as '分',
DateName(second,@a) as '秒'

 

 

--------------------------------------------------------------------------------

递归法查询一年的所有天数

1.

WITH Dates AS 
 ( SELECT [Date] = CONVERT(DATETIME,'01/01/2011') 
UNION ALL
 SELECT [Date] = DATEADD(DAY, 1, [Date]) FROM Dates WHERE Date  < '12/31/2011' )
  SELECT [Date],DATENAME(YEAR,date)AS 年,DATENAME(month,date)AS 月,DATENAME(day,date)AS 日,DATENAME(dw,date)AS 星期,DATENAME(week,date)AS 周数 FROM Dates OPTION (MAXRECURSION 366)
2.

WITH CTEDates AS ( SELECT CAST('20070101' AS DATETIME) AS DateVal UNION ALL SELECT DATEADD(dd, 1, DateVal) FROM CTEDates WHERE DateVal < '20071231' ) SELECT DateVal, 0,0,0,0,0,0,0,0,0 FROM CTEDates OPTION  (MAXRECURSION 366)

 

-------------------------------------------------------------------------------------

//按自然周统计 
select to_char(date,'iw'),sum() 
from 
where 
group by to_char(date,'iw')

//按自然月统计 
select to_char(date,'mm'),sum() 
from 
where 
group by to_char(date,'mm')

//按季统计 
select to_char(date,'q'),sum() 
from 
where 
group by to_char(date,'q')

//按年统计 
select to_char(date,'yyyy'),sum() 
from 
where 
group by to_char(date,'yyyy') 
------------------------------------------------------------------------

DateDiff 函数


返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。

语法

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 函数语法中有下列命名参数:

部分 描述 
interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔 
Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。 
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。 
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。


设置

interval 参数的设定值如下:

设置 描述 
yyyy 年 
q 季 
m 月 
y 一年的日数 
d 日 
w 一周的日数 
ww 周 
h 时 
n 分钟 
s 秒


firstdayofweek 参数的设定值如下:

常数 值 描述 
vbUseSystem 0 使用 NLS API 设置。 
vbSunday 1 星期日(缺省值) 
vbMonday 2 星期一 
vbTuesday 3 星期二 
vbWednesday 4 星期三 
vbThursday 5 星期四 
vbFriday 6 星期五 
vbSaturday 7 星期六

常数 值 描述 
vbUseSystem 0 用 NLS API 设置。 
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。 
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。 
vbFirstFullWeek 3 从第一个无跨年度的星期开始。

 

----------------------------------------------------------------------------------

 

本周的星期一 :SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)   
一年的第一天 :SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 
季度的第一天 :SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)   
本月最后一天:select   dateadd(dd,-day(getdate()),dateadd(m,1,getdate()))
上个月一号:select   dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate()))   
上月月底:select   dateadd(dd,-day(getdate()),getdate())                                                           本月一号select   dateadd(dd,-day(getdate())+1,getdate())                                                           
本月底:select   dateadd(dd,-day(dateadd(month,1,getdate())),dateadd(month,1,getdate()))
下月一号:select   dateadd(dd,-day(dateadd(month,1,getdate()))+1,dateadd(month,1,getdate()))
下月月底:select   dateadd(dd,-day(dateadd(month,2,getdate())),dateadd(month,2,getdate()))


 

 

你可能感兴趣的:(sql,本月与上月结余)