如何在 SQL Server 中将波斯日期转换为公历日期

Pay*_* Sh 3 c# sql-server procedure

我的表中有一些波斯日期,sql server格式如下:

1394/05/14
Run Code Online (Sandbox Code Playgroud)

我必须使用stored procedure将其转换为公历日期,因为我需要将它与今天的日期进行比较。

有谁知道解决方案?我找到了一些代码,但它们在闰年等方面有问题。

顺便说一句,我有以下代码,C#但我认为我必须使用,sql server proc因为这个过程应该以固定的时间表执行。

    public static DateTime ConvertToGregorianDate(string persianDate)
    {
        PersianCalendar pcalendar = new PersianCalendar();
        int Year = int.Parse(persianDate.Split('/')[0]);
        int Month = int.Parse(persianDate.Split('/')[1]);
        int Day = int.Parse(persianDate.Split('/')[2]);
        return new DateTime(Year, Month, Day, pcalendar);
    }
Run Code Online (Sandbox Code Playgroud)

提前谢谢。

Ano*_*non 6

几种不同的方法

1) 使用SQL CLR从 SQL Server 中运行 C# 代码

2) 在 T-SQL 中找到或编写正确的波斯<->公历转换实现

3) 针对您关心的所有日期运行 C# 代码,并将输出转储到文件中。将该文件导入到表中。当您需要转换时,只需查找答案即可。

选项 (3) 可能是最简单、最可维护且性能最佳的解决方案。约会的好处是,约会的次数确实不多。一百年的日历表只需要几千字节的内存,而数据库非常擅长进行查找。


Ehs*_*edi 6

GitHub 上一个项目可以完全满足您的需求!您只需要按照提供的说明在您的数据库中安装其功能。然后你可以像下面这样转换日期。

这个库的主要好处是你可以完全自由地根据你的需要塑造返回的结果。事实上,没有固定的返回格式。

select dbo.JalaliToGregorian('1395/06/11','/') 
--returns 2016-09-01 00:00:00.000

select dbo.GregorianToJalali(GETDATE(),'yyyy MMMM dddd') 
-- returns 1395 ??? ???? ???

select dbo.GregorianToJalali(GETDATE(),'yyyy/MM/dd HH:mm')
-- returns 1395/07/01 15:04
Run Code Online (Sandbox Code Playgroud)

在上面的例子中假设GETDATE()Sql server中的Method 返回2016/09/22 15:04:33!