Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE FUNCTION [dbo].[func_OrpheusToDate]
- (
- @stDate as integer
- )
- RETURNS date
- AS
- BEGIN
- DECLARE @sql_date_tmp DATE = NULL;
- DECLARE @lyear INTEGER;
- DECLARE @lmonth INTEGER;
- DECLARE @lday INTEGER;
- DECLARE @sdatstr VARCHAR(10);
- DECLARE @i INTEGER;
- DECLARE @j INTEGER;
- IF (@stDate IS NULL) OR (@stDate <= 0) OR (@stDate >= 999999)
- SET @sql_date_tmp = NULL
- ELSE IF (@stDate <= 59)
- BEGIN
- SET @sql_date_tmp = GETDATE();
- SET @lyear = 1600;
- IF (@stDate <= 30)
- BEGIN
- SET @lmonth = 1;
- SET @lday = @stDate +1;
- END
- ELSE
- BEGIN
- SET @lmonth = 2;
- SET @lday = @stDate -30;
- END;
- SET @sdatstr = CONVERT(VARCHAR, @lday) + '/' + CONVERT(VARCHAR, @lmonth) + '/' + CONVERT(VARCHAR, @lyear);
- SET @sql_date_tmp = CONVERT(DATE, @sdatstr);
- END
- ELSE
- BEGIN
- SET @sql_date_tmp = GETDATE();
- SET @i = (4*(@stDate -59))-1;
- SET @j = (4*ROUND((@i % 146097)/4, 0,1))+3
- SET @lyear = (100*ROUND(@i/146097, 0, 1))+ROUND(@j/1461, 0, 1)
- SET @i = (5*ROUND(((@j % 1461)+4)/4, 0, 1))-3;
- SET @lday = ROUND(((@i % 153)+5)/5, 0, 1);
- SET @lmonth = ROUND(@i/153, 0, 1);
- IF (@lmonth < 10)
- SET @lmonth = @lmonth +3
- ELSE
- BEGIN
- SET @lmonth = @lmonth -9;
- SET @lyear = @lyear +1;
- END;
- SET @lyear = @lyear + 1600;
- SET @sdatstr = CONVERT(VARCHAR, @lyear) + '/' + CONVERT(VARCHAR, @lmonth) + '/' + CONVERT(VARCHAR, @lday);
- SET @sql_date_tmp = CONVERT(DATE, @sdatstr);
- END
- RETURN @sql_date_tmp
- END
Add Comment
Please, Sign In to add comment