sql中日期日期周末月末函数

  • 栏目:数据 时间:2020-04-17 01:09
<返回列表

文章介绍了在sql中计算月末和周末的sql语句函数,有需要了解的朋友可以参考一下。 代码如下复制代码

  1韦德体育 1---流动人员号自动编号函数,由区域代码-年月日-序列号组成的 每日新序号
  2韦德体育 2---geovindu@163.com 涂聚文 www.dusystem.com
  3韦德体育 3if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetDayFloatingID]') and xtype in (N'FN', N'IF', N'TF'))
  4韦德体育 4drop function [dbo].[GetDayFloatingID]
  5韦德体育 5GO
  6韦德体育 6CREATE FUNCTION GetDayFloatingID(@headStr nvarchar(10),@date datetime)
  7韦德体育 7RETURNS nvarchar(50)
  8韦德体育 8BEGIN
  9韦德体育 9declare  @oid2 nvarchar(50)
 10韦德体育 10declare @oid nvarchar(50)
 11韦德体育 11declare @day nvarchar(2)
 12韦德体育 12declare @month nvarchar(2)
 13韦德体育 13declare @year nvarchar(4)
 14韦德体育 14declare @ym nvarchar(8)
 15韦德体育 15set @day=day(@date)
 16韦德体育 16if len(@day)=1
 17韦德体育 17    set @day='0'+@day --使日为两位长
 18韦德体育 18set @month=month(@date)
 19韦德体育 19if len(@month)=1
 20韦德体育 20    set @month='0'+@month --使月为两位长
 21韦德体育 21--set @year=right(convert(nvarchar,year(@date)),2)
 22韦德体育 22set @year=convert(nvarchar,year(@date))
 23韦德体育 23set @ym=@year+@month+@day --组成年月日字符
 24韦德体育 24
 25韦德体育 25--格式BJ200808200001
 26韦德体育 26if exists(select * from Populations)
 27韦德体育 27begin
 28韦德体育 28    select  top 1 @oid2=FloatingID from Populations  order by FloatingID desc --获取最后一条的编号,一定要有id,并且自动生成的,倒排序
 29韦德体育 29end
 30韦德体育 30else
 31韦德体育 31begin
 32韦德体育 32    set @oid2=@headStr+@ym+'00000' --没有记录是默认为今天
 33韦德体育 33end
 34韦德体育 34
 35韦德体育 35--流水号不是本月的,重新开始一个新的流水号
 36韦德体育 36if convert(nvarchar,left(@oid2,6))<>@headStr+@ym
 37韦德体育 37begin
 38韦德体育 38--用本月的年月号开始
 39韦德体育 39    set @oid2=@headStr+@ym+'00000'
 40韦德体育 40end
 41韦德体育 41
 42韦德体育 42declare @str nvarchar(50) --临时流水号
 43韦德体育 43
 44韦德体育 44set @str=convert(nvarchar,(convert(int,right(@oid2,4))+1)) --流水号加一
 45韦德体育 45while (5-len(@str)>0)
 46韦德体育 46begin
 47韦德体育 47     set @str='0'+@str    
 48韦德体育 48end
 49韦德体育 49set @oid2=@headStr+@ym+@str
 50韦德体育 50--print @oid2
 51韦德体育 51
 52韦德体育 52--如果该流水号已经存在,则重新获取
 53韦德体育 53while exists(select * from Populations where FloatingID=@oid2)
 54韦德体育 54begin
 55韦德体育 55    
 56韦德体育 56    set @str=convert(nvarchar,(convert(int,right(@oid2,5))+1)) --流水号加一
 57韦德体育 57    while (5-len(@str)>0)
 58韦德体育 58    begin
 59韦德体育 59         set @str='0'+@str    
 60韦德体育 60    end
 61韦德体育 61    set @oid2=@headStr+@ym+@str
 62韦德体育 62--     print @oid2
 63韦德体育 63end
 64韦德体育 64
 65韦德体育 65set @oid=convert(nvarchar,@oid2)
 66韦德体育 66--print 'UL'+convert(nvarchar,year(getdate()))+convert(nvarchar,month(getdate()))+@str
 67韦德体育 67韦德体育 ,RETURN @oid
 68韦德体育 68END
 69韦德体育 69GO
 70韦德体育 70--测试
 71韦德体育 71DECLARE @S varchar(30)
 72韦德体育 72select @S=dbo.GetDayFloatingID('02',getdate())
 73韦德体育 73select @s as '流动编号'
 74韦德体育 74
 75韦德体育 75--按月自动增长
 76韦德体育 76--如果当月,没有记录号,开始创建,如果有,在此基此上加1,以月新增长序列号
 77韦德体育 77if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetMonthFloatingID]') and xtype in (N'FN', N'IF', N'TF'))
 78韦德体育 78drop function [dbo].[GetMonthFloatingID]
 79韦德体育 79GO
 80韦德体育 80CREATE FUNCTION GetMonthFloatingID(@headStr nvarchar(10),@idate datetime)
 81韦德体育 81RETURNS nvarchar(50)
 82韦德体育 82BEGIN
 83韦德体育 83--@idate datetime,@headStr varchar(10),
 84韦德体育 84declare @fid varchar(100),@dat varchar(20),@ym varchar(20),@str nvarchar(50),@olde varchar(30),@y varchar(10),@m varchar(10),@d varchar(10)
 85韦德体育 85--set @headStr='01'
 86韦德体育 86--set @idate=cast('2009-04-3' as datetime)              --getdate()
 87韦德体育 87--set @ym=cast(getdate() as varchar(30))
 88韦德体育 88--找到当月最大的值
 89韦德体育 89select top 1 @fid=FloatingID from Populations 
 90韦德体育 90     where month(cast(substring(FloatingID,3,8) as datetime))=month(@idate) and year(cast(substring(FloatingID,3,8) as datetime))=year(@idate)
 91韦德体育 91    order by substring(FloatingID,11,5) desc
 92韦德体育 92--select @fid=MAX(substring(FloatingID,11,5)) from Populations  
 93韦德体育 93  -- where  month(getdate())
 94韦德体育 94               set @y=cast(year(@idate) as varchar(10))  --
 95韦德体育 95                set @m=cast(month(@idate) as varchar(10))
 96韦德体育 96                   if len(@m)=1
 97韦德体育 97            set @m='0'+@m
 98韦德体育 98        set @d=cast(day(@idate) as varchar(10))
 99韦德体育 99            if len(@d)=1
100韦德体育 100                set @d='0'+@d
101韦德体育 101                 set @ym=@y+@m+@d
102韦德体育 102if @fid<>''
103韦德体育 103   --加一
104韦德体育 104    begin
105韦德体育 105
106韦德体育 106        select @str=convert(nvarchar,(convert(int,right(@fid,5))+1))
107韦德体育 107                while (5-len(@str)>0)
108韦德体育 108        begin
109韦德体育 109             set @str='0'+@str    
110韦德体育 110        end
111韦德体育 111                set @olde=@headStr+@ym+@str
112韦德体育 112        --select @olde
113韦德体育 113    end
114韦德体育 114else
115韦德体育 115   begin
116韦德体育 116         set @olde=@headStr+@ym+'00000'
117韦德体育 117         --select @olde
118韦德体育 118    --print '2'
119韦德体育 119   end 
120韦德体育 120set @olde=convert(nvarchar,@olde)
121韦德体育 121--print 'UL'+convert(nvarchar,year(getdate()))+convert(nvarchar,month(getdate()))+@str
122韦德体育 122RETURN @olde
123韦德体育 123end
124韦德体育 124GO
125韦德体育 125--测试
126韦德体育 126select dbo.GetMonthFloatingID('09',getdate())
127韦德体育 127
128韦德体育 128---2009-03-04 涂聚文 geovindu@163.com

select Dateadd(wk,datediff(wk,0,getdate()),0) --周一 select Dateadd(wk,datediff(wk,0,getdate()),6) --周日

select Dateadd(mm,datediff(mm,0,getdate()),0) --月初select Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)) --月末

select Dateadd(yy,datediff(yy,0,getdate()),0) --年初select Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) --年末

1)本年初日期

代码如下复制代码

CREATE FUNCTION GetYearFirstDay(@yourDate varchar(10)) --本年初日期RETURNS varchar(10)AS BEGIN declare @getDate datetime,@getDateYear int,@returnDate datetimeset @getDate=cast(@yourDate as datetime)set @getDateYear=year(@getDate) --传入日期年份set @returnDate=cast(str(@getDateYear)+'-'+'01'+'-01' as datetime) --本年初日期return convert(varchar(10),@returnDate,120)END

2)上年同期日期 上年同月末天数小于现在天数按最后一天计算

代码如下复制代码

CREATE FUNCTION GetPreYearSameDay(@yourDate varchar(10)) --上年同期日期 上年同月末天数小于现在天数按最后一天计算RETURNS varchar(10)AS BEGIN declare @getDate datetime,@getDateYear int,@getDateMonth int,@getDateDay int,@returnDate datetime,@returnDateYear int,@returnDateMonth int,@returnDateDay intset @getDate=cast(@yourDate as datetime)set @getDateYear=year(@getDate) --传入日期年份set @getDateMonth=month(@getDate) --传入日期月份set @getDateDay=day(@getDate) --传入日期天

set @returnDate=DateAdd(m,1,@getDate) --取得下月日期

set @returnDate=cast(str(year(@returnDate)-1)+'-'+str(month(@returnDate))+'-'+'01' as datetime)-1 --取得去年同月的最后一天日期

set @returnDateYear=year(@returnDate) --去年同月 年份set @returnDateMonth=month(@returnDate) --去年同月 月份set @returnDateDay=day(@returnDate) --去年同月最后一天 天

if @getDateDay@returnDateDay --传入日期天数大于去年同月末天数 返回去年同月最后一天 begin set @returnDate=@returnDate endelse begin set @returnDate=cast(str(@returnDateYear)+'-'+str(@returnDateMonth)+'-'+str(@getDateDay) as datetime) endreturn convert(varchar(10),@returnDate,120)END

3)取 前 几天 日期

代码如下复制代码

CREATE FUNCTION GetPreSomeDate(@yourDate varchar(10),@PreDays int) --取 前 几天 日期RETURNS varchar(10)AS

BEGIN declare @getDate datetime,@returnDate datetime

set @getDate=cast(@yourDate as datetime)set @returnDate=@getDate-@PreDaysreturn convert(varchar(10),@returnDate,120)END

4)上月同期日期 上月末天数小于现在天数按最后一天计算

代码如下复制代码

CREATE FUNCTION GetPreMonthSameDay(@yourDate varchar(10)) --上月同期日期 上月末天数小于现在天数按最后一天计算RETURNS varchar(10)AS

BEGIN declare @getDate datetime,@getDateYear int,@getDateMonth int,@getDateDay int,@returnDate datetime,@returnDateYear int,@returnDateMonth int,@returnDateDay intset @getDate=cast(@yourDate as datetime)set @getDateYear=year(@getDate) --传入日期年份set @getDateMonth=month(@getDate) --传入日期月份set @getDateDay=day(@getDate) --传入日期天

set @returnDate=cast(str(@getDateYear)+'-'+str(@getDateMonth)+'-01' as datetime)-1 --上月最后一天set @returnDateYear=year(@returnDate) --上月最后一天 年份set @returnDateMonth=month(@returnDate) --上月最后一天 月份set @returnDateDay=day(@returnDate) --上月最后一天 天

if @getDateDay@returnDateDay --传入日期天数大于上月末天数 返回上月最后一天 begin set @returnDate=@returnDate endelse begin set @returnDate=cast(str(@returnDateYear)+'-'+str(@returnDateMonth)+'-'+str(@getDateDay) as datetime) endreturn convert(varchar(10),@returnDate,120)END

5)上月最后一天日期

代码如下复制代码

CREATE FUNCTION GetPreMonthLastDay(@yourDate varchar(10)) --上月最后一天日期RETURNS varchar(10)AS

BEGIN declare @getDate datetime,@getDateYear int,@getDateMonth int,@returnDate datetimeset @getDate=cast(@yourDate as datetime)set @getDateYear=year(@getDate)set @getDateMonth=month(@getDate)set @returnDate=cast(str(@getDateYear)+'-'+str(@getDateMonth)+'-01' as datetime)-1return convert(varchar(10),@returnDate,120)END

6)下面有取得本月初日期 、--本月初日期、本月末日期一个日期格式sql比较复杂

代码如下复制代码 CREATE FUNCTION GetMonthFirstDay(@yourDate varchar(10)) --取得本月初日期RETURNS varchar(10)AS

BEGIN declare @getDate datetime,@getDateYear int,@getDateMonth int,@returnDate datetimeset @getDate=cast(@yourDate as datetime)set @getDateYear=year(@getDate) --传入日期年份set @getDateMonth=month(@getDate) --传入日期月份set @returnDate=cast(str(@getDateYear)+'-'+str(@getDateMonth)+'-01' as datetime) --本月初日期return convert(varchar(10),@returnDate,120)END

CREATE FUNCTION GetMonthLastDay(@Date datetime) RETURNS datetimeAS ----本月末日期BEGIN declare @getDate datetime,@getDateYear int,@getDateMonth int,@returnDate datetimeset @getDate=DATEADD(mm,1,@date)set @getDateYear=year(@getDate)set @getDateMonth=month(@getDate)set @returnDate=cast(str(@getDateYear)+'-'+str(@getDateMonth)+'-01' as datetime)-1return @returnDateEND

代码如下复制代码

select '100' as region,convert(varchar(30),getdate(),100) as styleunionselect '101', convert(varchar(30),getdate(),101)unionselect '102',convert(varchar(30),getdate(),102)unionselect '103',convert(varchar(30),getdate(),103)unionselect '104',convert(varchar(30),getdate(),104)unionselect '105',convert(varchar(30),getdate(),105)unionselect '106',convert(varchar(30),getdate(),106)unionselect '107',convert(varchar(30),getdate(),107)unionselect '108',convert(varchar(30),getdate(),108)unionselect '109',convert(varchar(30),getdate(),109)unionselect '110',convert(varchar(30),getdate(),110)unionselect '111',convert(varchar(30),getdate(),111)unionselect '112',convert(varchar(30),getdate(),112)unionselect '113',convert(varchar(30),getdate(),113)unionselect '11',convert(varchar(30),getdate(),114)

上一篇:程序如何知道SQL2005服务器用的是什么端口呢 下一篇:没有了

更多阅读

sql中日期日期周末月末函数

数据 2020-04-17
文章介绍了在sql中计算月末和周末的sql语句函数,有需要了解的朋友可以参考一下。代码如下...
查看全文

然后执行存储过程xp

数据 2020-04-17
看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到...
查看全文

程序如何知道SQL2005服务器用的是什么端口

数据 2020-04-17
1、因为SQL2000安装过程中无法修改实例名称,故安装过程中必须先安装SQL2000,然后再安装SQL2...
查看全文

友情链接: 网站地图

Copyright © 2015-2019 http://www.koi-bumi.com. 韦德体育有限公司 版权所有