Guest User

Untitled

a guest
Feb 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. CREATE FUNCTION [dbo].[func_OrpheusToDate]
  2. (
  3. @stDate as integer
  4. )
  5. RETURNS date
  6. AS
  7. BEGIN
  8. DECLARE @sql_date_tmp DATE = NULL;
  9. DECLARE @lyear INTEGER;
  10. DECLARE @lmonth INTEGER;
  11. DECLARE @lday INTEGER;
  12. DECLARE @sdatstr VARCHAR(10);
  13. DECLARE @i INTEGER;
  14. DECLARE @j INTEGER;
  15.  
  16. IF (@stDate IS NULL) OR (@stDate <= 0) OR (@stDate >= 999999)
  17. SET @sql_date_tmp = NULL
  18. ELSE IF (@stDate <= 59)
  19. BEGIN
  20. SET @sql_date_tmp = GETDATE();
  21. SET @lyear = 1600;
  22.  
  23. IF (@stDate <= 30)
  24. BEGIN
  25. SET @lmonth = 1;
  26. SET @lday = @stDate +1;
  27. END
  28. ELSE
  29. BEGIN
  30. SET @lmonth = 2;
  31. SET @lday = @stDate -30;
  32. END;
  33.  
  34. SET @sdatstr = CONVERT(VARCHAR, @lday) + '/' + CONVERT(VARCHAR, @lmonth) + '/' + CONVERT(VARCHAR, @lyear);
  35. SET @sql_date_tmp = CONVERT(DATE, @sdatstr);
  36. END
  37. ELSE
  38. BEGIN
  39. SET @sql_date_tmp = GETDATE();
  40.  
  41. SET @i = (4*(@stDate -59))-1;
  42.  
  43. SET @j = (4*ROUND((@i % 146097)/4, 0,1))+3
  44. SET @lyear = (100*ROUND(@i/146097, 0, 1))+ROUND(@j/1461, 0, 1)
  45.  
  46. SET @i = (5*ROUND(((@j % 1461)+4)/4, 0, 1))-3;
  47. SET @lday = ROUND(((@i % 153)+5)/5, 0, 1);
  48.  
  49. SET @lmonth = ROUND(@i/153, 0, 1);
  50.  
  51. IF (@lmonth < 10)
  52. SET @lmonth = @lmonth +3
  53. ELSE
  54. BEGIN
  55. SET @lmonth = @lmonth -9;
  56. SET @lyear = @lyear +1;
  57. END;
  58.  
  59. SET @lyear = @lyear + 1600;
  60.  
  61. SET @sdatstr = CONVERT(VARCHAR, @lyear) + '/' + CONVERT(VARCHAR, @lmonth) + '/' + CONVERT(VARCHAR, @lday);
  62.  
  63. SET @sql_date_tmp = CONVERT(DATE, @sdatstr);
  64. END
  65.  
  66. RETURN @sql_date_tmp
  67. END
Add Comment
Please, Sign In to add comment