Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法
2012-07-30 16:26
1371 查看
原文链接:http://www.dbainfo.net/sybase-ase-current-date-last_day.htm
本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
Oracle中查询月底那天的日期的函数为:last_day()。 在ASE中没有对应的函数,在Oracle移植到Sybase的时候,需要手动编写函数来实现,幸亏ASE15.0.2后开始支持自定义函数。
下面提供3种实现查询本月最后一天的日期的SQL语句:
第一种:
select dateadd(dd,-1,convert(char(8),(datepart(yy,dateadd(mm,1,getdate()))*10000+datepart(mm,dateadd(mm,1,getdate()))*100+01)))
go
将本月的下一个月的年份和月份提取出来,以数字的形式相加,然后转化成类似YYYYMMDD的这种日期格式。最后直接取下个月的第一天的前一天即可。在ASE中字符串 '20110101' 和 convert(datetime,'20110101') 是相等的。
第二种:
select dateadd(dd,-1, convert(datetime,left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + '01') )
go
先将当前日期的下一个月的日期显示成YYYYMMDD的格式,取前6个字符和01拼接成下一月的第一天的日期,然后取前一天即可。convert函数中style的样式,请参考:Sybase ASE convert函数中的style日期时间样式
或者下面的写法:
select dateadd(dd,-1, left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + '01' )
go
思路是一样的。
第三种:
SELECT DATEADD(DD, -DAY(DATEADD(MM, 1, getdate() )), DATEADD(MM, 1, getdate() ))
go
此方法的思路为:计算当前日期的下一月的那天的前N天的日期,N为当前日期在本月的天数。
改进成类似Oracle中的last_day()的函数如下:
第一种:
create function last_day(@d datetime)
returns datetime
as
begin
declare @rtndate datetime
select @rtndate = dateadd(DD,-day(dateadd(MM,1,@d)),dateadd(MM,1,@d) )
return @rtndate
end
go
第2种:
create function dbo.last_day2(@current_date datetime)
returns datetime
as
begin
return dateadd(dd,-1, left(convert(varchar, dateadd(mm,1,@current_date) ,112),6) + '01' )
end
go
实现效果如下:
1> select dbo.last_day(getdate()) ,dbo.last_day2(getdate() )
2> go
-------------------------- --------------------------
Nov 30 2010 4:19PM Nov 30 2010 12:00AM
(1 row affected)
1> select dbo.last_day('19991231') ,dbo.last_day2('19991231' )
2> go
-------------------------- --------------------------
Dec 31 1999 12:00AM Dec 31 1999 12:00AM
(1 row affected)
1> select dbo.last_day('20100228') ,dbo.last_day2('20100228' )
2> go
-------------------------- --------------------------
Feb 28 2010 12:00AM Feb 28 2010 12:00AM
(1 row affected)
1> select dbo.last_day('20000228') ,dbo.last_day2('20000228' )
2> go
-------------------------- --------------------------
Feb 29 2000 12:00AM Feb 29 2000 12:00AM
(1 row affected)
1>
本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
Oracle中查询月底那天的日期的函数为:last_day()。 在ASE中没有对应的函数,在Oracle移植到Sybase的时候,需要手动编写函数来实现,幸亏ASE15.0.2后开始支持自定义函数。
下面提供3种实现查询本月最后一天的日期的SQL语句:
第一种:
select dateadd(dd,-1,convert(char(8),(datepart(yy,dateadd(mm,1,getdate()))*10000+datepart(mm,dateadd(mm,1,getdate()))*100+01)))
go
将本月的下一个月的年份和月份提取出来,以数字的形式相加,然后转化成类似YYYYMMDD的这种日期格式。最后直接取下个月的第一天的前一天即可。在ASE中字符串 '20110101' 和 convert(datetime,'20110101') 是相等的。
第二种:
select dateadd(dd,-1, convert(datetime,left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + '01') )
go
先将当前日期的下一个月的日期显示成YYYYMMDD的格式,取前6个字符和01拼接成下一月的第一天的日期,然后取前一天即可。convert函数中style的样式,请参考:Sybase ASE convert函数中的style日期时间样式
或者下面的写法:
select dateadd(dd,-1, left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + '01' )
go
思路是一样的。
第三种:
SELECT DATEADD(DD, -DAY(DATEADD(MM, 1, getdate() )), DATEADD(MM, 1, getdate() ))
go
此方法的思路为:计算当前日期的下一月的那天的前N天的日期,N为当前日期在本月的天数。
改进成类似Oracle中的last_day()的函数如下:
第一种:
create function last_day(@d datetime)
returns datetime
as
begin
declare @rtndate datetime
select @rtndate = dateadd(DD,-day(dateadd(MM,1,@d)),dateadd(MM,1,@d) )
return @rtndate
end
go
第2种:
create function dbo.last_day2(@current_date datetime)
returns datetime
as
begin
return dateadd(dd,-1, left(convert(varchar, dateadd(mm,1,@current_date) ,112),6) + '01' )
end
go
实现效果如下:
1> select dbo.last_day(getdate()) ,dbo.last_day2(getdate() )
2> go
-------------------------- --------------------------
Nov 30 2010 4:19PM Nov 30 2010 12:00AM
(1 row affected)
1> select dbo.last_day('19991231') ,dbo.last_day2('19991231' )
2> go
-------------------------- --------------------------
Dec 31 1999 12:00AM Dec 31 1999 12:00AM
(1 row affected)
1> select dbo.last_day('20100228') ,dbo.last_day2('20100228' )
2> go
-------------------------- --------------------------
Feb 28 2010 12:00AM Feb 28 2010 12:00AM
(1 row affected)
1> select dbo.last_day('20000228') ,dbo.last_day2('20000228' )
2> go
-------------------------- --------------------------
Feb 29 2000 12:00AM Feb 29 2000 12:00AM
(1 row affected)
1>
相关文章推荐
- iOS-月日期,本月初始第一天和最后一天,以及比较两个日期的类方法
- C#获取上个月第一天和最后一天日期的方法
- SQL 计算每个月的第一天,最后一天,本月的天数,ORACLE中日期加减
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- JAVA calender 的使用实现查询一个月的第1天和最后一天,学的是技巧。
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月
- java 获取上月、一个月最后一天、周一、周日、本月日期
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- linux 常用日期 查询前一天 当月1号 上个月第一条和最后一天 上个月
- java获取每月的最后一天实现方法
- mysql 根据指定日期取 周一至周日 本月第一天 最后一天
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- 获取本月第一天和最后一天的方法
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- 指定日期最后一天的表示方法
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法