با سلام به دوستان،
دو تابع زیر را جهت تبدیل تاریخ میلادی به شمسی و بالعکس نوشته ام. می توانید امتحان کنید:
1 - تبدیل تاریخ میلادی به شمسی:
CREATE FUNCTION DateFarsi(@DateLatin AS DateTime)
RETURNS CHAR(10) AS
BEGIN
DECLARE @DateFarsi CHAR(10)
DECLARE @Days int
DECLARE @Tmp int
DECLARE @Year_Farsi int
DECLARE @Month_Farsi int
DECLARE @Day_Farsi int
SET @Days = DATEDIFF(DAY, '19000320', @DateLatin)
SET @Year_Farsi = 1279
SET @Month_Farsi = 01
SET @Day_Farsi = 01
SET @Tmp = @Days / 365
IF (@Tmp * 365) + ((@Tmp + 3) / 4) > @Days
SET @Tmp = @Tmp - 1
SET @Year_Farsi = @Year_Farsi + @Tmp
SET @Days = @Days - (@Tmp * 365) - ((@Tmp + 3) / 4)
IF @Days <= 186
BEGIN
SET @Tmp = @Days / 31
SET @Month_Farsi = @Month_Farsi + @Tmp
SET @Days = @Days - (@Tmp * 31)
END
ELSE
BEGIN
SET @Days = @Days - 186
SET @Tmp = @Days / 30
SET @Month_Farsi = @Month_Farsi + @Tmp + 6
SET @Days = @Days - (@Tmp * 30)
END
SET @Day_Farsi = @Day_Farsi + @Days
RETURN REPLACE(STR(@Year_Farsi, 4, 0) +
STR(@Month_Farsi, 2, 0) +
STR(@Day_Farsi,2, 0), ' ', '0')
END
2 - تبدیل تاریخ شمسی به میلادی:
CREATE FUNCTION DateLatin(@DateFarsi CHAR(10))
RETURNS DateTime AS
BEGIN
SET @DateFarsi = REPLACE(@DateFarsi, '/', '')
DECLARE @Days BigInt
DECLARE @Year_Farsi int
DECLARE @Month_Farsi int
DECLARE @Day_Farsi int
SET @Year_Farsi = CONVERT(int, SUBSTRING(@DateFarsi, 1, 4))
SET @Month_Farsi = CONVERT(int, SUBSTRING(@DateFarsi, 5, 2))
SET @Day_Farsi = CONVERT(int, SUBSTRING(@DateFarsi, 7, 2))
SET @Days = ((@Year_Farsi - 1279) * 365) + ((@Year_Farsi - 1276) / 4)
IF @Month_Farsi <= 7
SET @Days = @Days + ((@Month_Farsi - 1) * 31)
ELSE
SET @Days = @Days + ((@Month_Farsi - 7) * 30) + 186
RETURN DATEADD(DAY, @Days + @Day_Farsi - 1, '19000320')
END
انشاء الله مقبول بیافتد.