我住在伊朗,我们在伊朗使用的是太阳日期而不是格里高利日期。是否可以将Date
数据类型从格里高利日期更改为日期日期。另外,我想在我的查询中使用日期函数,例如DateAdd(),DateDiff(),..
编辑:
太阳日期的月份:
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函数:
答案 0 :(得分:1)
我建议您构建一个日历表,其中包含格里高利日期和太阳日期为两列(以及其他列,例如星期几,月份编号,年份,月份名称) 。您应该能够在Excel中轻松构建这样的表,然后将其导入表中。
然后,您可以采取两种方法之一。第一种是将所有日期存储为公历日期,然后查找日期值以转换输入和输出。如果你想为日期使用很多内置功能,你会这样做。
第二种方法是将日期存储为表示日期的字符串。然后,当您想要执行内置操作时,可以使用该表转换为格里高利日期。但是,您可能会发现仅使用日历表就不必使用大多数内置函数。
答案 1 :(得分:0)
您需要使用sp_configure来设置服务器的默认日期格式。 http://support.microsoft.com/kb/173907
答案 2 :(得分:0)
您无法将Date数据类型日历从gregorian更改为solar。
答案 3 :(得分:0)
我发现了我的问题。 我必须在sql server中使用格里高利日期数据类型,并将我的应用程序中的日期列转换为日期。 我的应用程序使用C#和以下链接帮助将数据从格里高利日期转换为日期日期。 Display gregoriandate in solar date format
谢谢大家。