多语言展示
当前在线:1657今日阅读:176今日分享:34

ERP中设置生日提醒-农历版

在实施北方企业的时候,有不少企业都提出他们那边过生日基本是根据农历来,花了些心思帮客户做出来了,公司可以将农历生日提醒也内置到数据库中,以方便其他ERP实施员直接使用。以下是制作过程。
工具/原料
1

ERP

2

sql sever

3

tools 工具

方法/步骤
1

第一步:创建农历日期函数CODE:USE [AIO7_COST_FC]GO/****** Object:  UserDefinedFunction [dbo].[fn_GetLunar]    Script Date: 07/06/2015 17:23:15 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE  FUNCTION  [dbo].[fn_GetLunar](@solarDay  DATETIME)          RETURNS  datetime          AS          BEGIN            DECLARE  @solData  int            DECLARE  @offset  int            DECLARE  @iLunar  int            DECLARE  @i  INT              DECLARE  @j  INT              DECLARE  @yDays  int            DECLARE  @mDays  int            DECLARE  @mLeap  int            DECLARE  @mLeapNum  int            DECLARE  @bLeap  smallint            DECLARE  @temp  int                  DECLARE  @YEAR  INT              DECLARE  @MONTH  INT            DECLARE  @DAY  INT                        DECLARE  @OUTPUTDATE  DATETIME              --保证传进来的日期是不带时间          SET  @solarDay=cast(@solarDay  AS  char(10))            SET  @offset=CAST(@solarDay-'1900-01-30'  AS  INT)                  --确定农历年开始          SET  @i=1900            --SET  @offset=@solData            WHILE  @i<2050  AND  @offset>0            BEGIN                    SET  @yDays=348                    SET  @mLeapNum=0                SELECT  @iLunar=dataInt  FROM  SolarData  WHERE  yearId=@i                  --传回农历年的总天数              SET  @j=32768                WHILE  @j>8                BEGIN                    IF  @iLunar  &  @j  >0                        SET  @yDays=@yDays+1                    SET  @j=@j/2                END                --传回农历年闰哪个月 1-12  ,  没闰传回 0                SET  @mLeap  =  @iLunar  &  15                --传回农历年闰月的天数 ,加在年的总天数上              IF  @mLeap  >  0                BEGIN                    IF  @iLunar  &  65536  >  0                        SET  @mLeapNum=30                    ELSE                          SET  @mLeapNum=29                    SET  @yDays=@yDays+@mLeapNum                END                      SET  @offset=@offset-@yDays                SET  @i=@i+1            END                    IF  @offset  <=  0            BEGIN                SET  @offset=@offset+@yDays                SET  @i=@i-1            END            --确定农历年结束              SET  @YEAR=@i            --确定农历月开始          SET  @i  =  1            SELECT  @iLunar=dataInt  FROM  SolarData  WHERE  yearId=@YEAR     --判断那个月是润月          SET  @mLeap  =  @iLunar  &  15            SET  @bLeap  =  0            WHILE  @i  <  13  AND  @offset  >  0            BEGIN                --判断润月              SET  @mDays=0                IF  (@mLeap  >  0  AND  @i  =  (@mLeap+1)  AND  @bLeap=0)                BEGIN--是润月                  SET  @i=@i-1                    SET  @bLeap=1                    --传回农历年闰月的天数                  IF  @iLunar  &  65536  >  0                        SET  @mDays  =  30                    ELSE                          SET  @mDays  =  29                END                ELSE                --不是润月              BEGIN                    SET  @j=1                    SET  @temp  =  65536                      WHILE  @j<=@i                    BEGIN                        SET  @temp=@temp/2                        SET  @j=@j+1                    END                    IF  @iLunar  &  @temp  >  0                        SET  @mDays  =  30                    ELSE                        SET  @mDays  =  29                END                      --解除闰月          IF  @bLeap=1  AND  @i=  (@mLeap+1)                SET  @bLeap=0            SET  @offset=@offset-@mDays                SET  @i=@i+1            END                    IF  @offset  <=  0            BEGIN                SET  @offset=@offset+@mDays                SET  @i=@i-1            END              --确定农历月结束              SET  @MONTH=@i              --确定农历日结束              SET @DAY=@offset    SET @OUTPUTDATE=CAST(@Year AS char(4))        + RIGHT('0' + CAST(@Month AS varchar(2)), 2)        + RIGHT('0' + CAST(@Day AS varchar(2)), 2)        RETURN  @OUTPUTDATE  ENDGO

2

第二步:生成公历/农历对照表CODE:select convert(char(10),dateadd(d,number,'2015-1-1'),23) as GL,--公历    dbo.fn_GetLunar(dateadd(d,number,'2015-1-1')) as NL --农历INTO LunarCalenderContrastTable --公历农历对照表from master..spt_values where type='p'

3

第三步:根据身份证提取员工公历生日,并转化为农历生日以及今年农历生日对应的公历,此查询的列是为滚动字幕准备CODE:Select null, 'O',EmpName+',在你生日来临之际,祝你生日快乐,健康幸福!',Convert(varchar(10), Getdate(), 120), Convert(varchar(10), cast(T1.GL as DATETIME)+3, 120),'系统',Cast(SubString(IDCard,7,8) as DateTime) AS '身份证生日'--,DateDiff(Year,Cast(SubString(IDCard,7,8) as DateTime),GetDate())AS '年龄', dbo.fn_GetLunar1(Cast(SubString(IDCard,7,8) as DateTime)) AS '农历出生日期',--DateAdd(Year,DateDiff(Year,Cast(SubString(IDCard,7,8) as DateTime),GetDate()),Cast(SubString(IDCard,7,8) as DateTime)) as '本年阳历生日',Cast(Cast(SubString(dbo.fn_GetLunar1(Cast(SubString(IDCard,7,8) as DateTime)),1,4)  AS INT)+Cast(DateDiff(Year,Cast(SubString(IDCard,7,8) as DateTime),GetDate()) AS INT) AS NVARCHAR)+Cast(SubString(dbo.fn_GetLunar1(Cast(SubString(IDCard,7,8) as DateTime)),5,4) AS NVARCHAR) AS '今年农历生日',T1.GL as '对应的阳历'from LunarCalenderContrastTable T1LEFT JOIN HREmp T ON Cast(cast(SubString(dbo.fn_GetLunar1(Cast(SubString(IDCard,7,8) as DateTime)),1,4)  AS INT)+Cast(DateDiff(Year,Cast(SubString(IDCard,7,8) as DateTime),GetDate()) AS INT) AS NVARCHAR)+Cast(SubString(dbo.fn_GetLunar1(Cast(SubString(IDCard,7,8) as DateTime)),5,4) AS NVARCHAR)=T1.NLWhere Cast(T1.GL AS DATETIME)>GETDATE() and Cast(T1.GL AS DATETIME)< GETDATE()+8      and T.EmpType = 'O' and T.IsClose = 'N'

4

第四步:滚动字幕插入的一些设置自行根据企业实际需求进行相关设置。

推荐信息