在MS-SQL中,如何获取上个月的月份
在MS-SQL中,如何获取上个月的月份?
例如,目前是2013年4月,则自动获得2013年3月;
如果目前是2013年1月,则自动获得2012年12月
trans_date >= CONVERT(VARCHAR(10), Dateadd(month, -3, Getdate()), 23)
丛单据日期开始倒推三个月内的
________________
------解决方案--------------------
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()))