我住在伊朗,我们在伊朗使用的是阳历而非阳历。是否可以将Date数据类型从公历更改为阳历。另外,我想在查询中使用日期函数,例如DateAdd(),DateDiff(),..。
Date
编辑 :
阳历月份的月份:
1- 31 day 2- 31 day 3- 31 day 4- 31 day 5- 31 day 6- 31 day 7- 30 day 8- 30 day 9- 30 day 10- 30 day 11- 30 day 12- 29 day (in Leap year 30 day) SUM-365 day in each year
太阳日期的开始是每个公历日期的23-3-…。
编辑1
我在SQL Server中使用以下函数将公历日期转换为太阳日期:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[PersianDate] (@MiladiDate DATE) returns varchar(10) AS BEGIN Declare @days int Declare @year int set @year=Year(@MiladiDate) Declare @month int Set @days=DATEDIFF ( day , Convert(Date,cast(Year(@MiladiDate) as varchar)+'/1/1'), @MiladiDate)+1 if @days>79 --蹖毓賳蹖 蹖讴 賮乇賵乇丿蹖賳 賲丕賴 begin set @days=@days-79 if @days<=186 begin set @month=@days/31; if (@days%31=0) set @days=31 else begin set @month=@month+1 set @days=@days%31 end end else begin set @days=@days-186 set @month=6+@days/30; if (@days%30=0) set @days=30 else begin set @month=@month+1 set @days=@days%30 end end set @year=@Year-621 end else begin set @year=@year-1 if (((@Year % 100)<> 0 and (@Year % 4) = 0) or ((@Year % 100)= 0 and (@Year % 400) = 0)) set @days=@days+11 else set @days=@days+10 set @month=@days/30+9 if (@days%30=0) set @days=30 else begin set @month=@month+1 set @days=@days%30 end set @year=@year-621 end RETURN cast (@year as varchar)+'/'+ case when @month<10 then '0' else '' END + cast (@month as varchar)+'/'+ case when @days<10 then '0' else '' END + cast (@days as varchar) END
编辑2
要将太阳日期转换为公历可以使用CLR函数:
创建CLR功能
您不能将日期数据类型的日历从公历更改为太阳。