2

私はイランに住んでいて、ここイランではグレゴリオ暦の代わりに太陽のナツメヤシを使用しています。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

グレゴリオ暦の日付を太陽の日付に変換するために、SQLServerで以下の関数を使用します。

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関数を作成する

4

4 に答える 4

1

グレゴリオ暦と太陽暦を 2 つの列 (および曜日、月番号、年、月の名前などの他の列) として持つカレンダー テーブルを作成することをお勧めします。このようなテーブルを Excel で簡単に作成し、それをテーブルにインポートできるはずです。

次に、2 つのアプローチのいずれかを取ることができます。1 つ目は、すべての日付をグレゴリオ暦の日付として保存し、日付値を検索して入力と出力で変換することです。日付に多くの組み込み機能を使用する場合は、これを行います。

2 番目の方法は、太陽の日付を表す文字列として日付を格納することです。次に、組み込み操作を実行するときに、テーブルを使用してグレゴリオ暦の日付に変換できます。ただし、カレンダー テーブルがあるだけで、ほとんどの組み込み関数を使用する必要がなくなる場合があります。

于 2012-06-08T12:26:25.210 に答える
0

Dateデータ型カレンダーをグレゴリオ暦からソーラーに変更することはできません。

于 2012-06-08T12:41:06.130 に答える
0

サーバーのデフォルトの日付形式を設定するには、sp_configure を使用する必要があります。 http://support.microsoft.com/kb/173907

于 2012-06-08T12:07:09.117 に答える
0

私は自分の質問に対する回答を見つけました。SQL Server でグレゴリオ暦の日付データ型を使用し、アプリケーションの日付列を太陽日付に変換する必要があります。私のアプリケーションは C# で記述し、以下のリンクはグレゴリオ暦の日付から太陽の日付にデータを変換するのに役立ちます。 太陽の日付形式でグレゴリオ暦を表示する

皆さんありがとう。

于 2012-06-08T12:58:15.783 に答える