2011-07-15 38 views
7

我想將我的日期時間轉換爲SQL Server中的波斯日期時間。我的日期時間爲MM/DD/YYYY格式。有沒有在SQL Server中的任何功能,要做到這一點,當我想回歷日期時間我用這個如何轉換在SQL服務器中的波斯語datetime

select CONVERT(VARCHAR(40), getdate(), 131) //Output is 14/08/1432 5:02:01:197PM 

我使用SQL Server 2008

回答

2

開箱即用,沒有。

你必須寫自己的UDF,但有一個關於CodePlexanother

9

我知道這是爲時已晚,但對於其他人一樣我有這樣的煩惱,也許有用。

你應該寫一個SQL函數的這種轉換是這樣的: Converting Gregorian to Persian Date

,然後用它是這樣的:

SELECT dbo.[UDF_Gregorian_To_Persian]('2013-08-24') 
6

我知道這是爲時已晚,在回答這個問題,但我已經提交了我使用了很長時間沒有任何bug的功能,我見過的所有其他方法在插入年份都有問題:

CREATE FUNCTION [CalculatePersianDate] (@intDate DATETIME) 
RETURNS NVARCHAR(max) 
BEGIN 

DECLARE @shYear AS INT ,@shMonth AS INT ,@shDay AS INT ,@intYY AS INT ,@intMM AS INT ,@intDD AS INT ,@Kabiseh1 AS INT ,@Kabiseh2 AS INT ,@d1 AS INT ,@m1 AS INT, @shMaah AS NVARCHAR(max),@shRooz AS NVARCHAR(max),@DayCnt AS INT 
DECLARE @DayDate AS NVARCHAR(max) 

SET @intYY = DATEPART(yyyy, @intDate) 

IF @intYY < 1000 SET @intYY = @intYY + 2000 

SET @intMM = MONTH(@intDate) 
SET @intDD = DAY(@intDate) 
SET @shYear = @intYY - 622 
SET @DayCnt = 5 

IF ((@intYY - 1992) % 4 = 0) SET @Kabiseh1 = 0 ELSE SET @Kabiseh1 = 1 

IF ((@shYear - 1371) % 4 = 0) SET @Kabiseh2 = 0 ELSE SET @Kabiseh2 = 1 

SET @m1 = 1 
SET @d1 = 1 
SET @shMonth = 10 
SET @shDay = 11 

IF ((@intYY - 1993) % 4 = 0) SET @shDay = 12 


WHILE (@m1 != @intMM) OR (@d1 != @intDD) 
BEGIN 

    SET @d1 = @d1 + 1 
    SET @DayCnt = @DayCnt + 1 

    IF 
    (@d1 = 32 AND (@m1 = 1 OR @m1 = 3 OR @m1 = 5 OR @m1 = 7 OR @m1 = 8 OR @m1 = 10 OR @m1 = 12)) 
    OR 
    (@d1 = 31 AND (@m1 = 4 OR @m1 = 6 OR @m1 = 9 OR @m1 = 11)) 
    OR 
    (@d1 = 30 AND @m1 = 2 AND @Kabiseh1 = 1) 
    OR 
    (@d1 = 29 AND @m1 = 2 AND @Kabiseh1 = 0) 
    BEGIN 
    SET @m1 = @m1 + 1 
    SET @d1 = 1 
    END 

    IF @m1 > 12 
    BEGIN 
    SET @intYY = @intYY + 1 
    SET @m1 = 1 
    END 

    IF @DayCnt > 7 SET @DayCnt = 1 

SET @shDay = @shDay + 1 

    IF 
    (@shDay = 32 AND @shMonth < 7) 
    OR 
    (@shDay = 31 AND @shMonth > 6 AND @shMonth < 12) 
    OR 
    (@shDay = 31 AND @shMonth = 12 AND @Kabiseh2 = 1) 
    OR 
    (@shDay = 30 AND @shMonth = 12 AND @Kabiseh2 = 0) 
    BEGIN 
    SET @shMonth = @shMonth + 1 
    SET @shDay = 1 
    END 

    IF @shMonth > 12 
    BEGIN 
    SET @shYear = @shYear + 1 
    SET @shMonth = 1 
    END 

END 

IF @shMonth=1 SET @shMaah=N'فروردین' 
IF @shMonth=2 SET @shMaah=N'اردیبهشت' 
IF @shMonth=3 SET @shMaah=N'خرداد' 
IF @shMonth=4 SET @shMaah=N'تیر' 
IF @shMonth=5 SET @shMaah=N'مرداد' 
IF @shMonth=6 SET @shMaah=N'شهریور' 
IF @shMonth=7 SET @shMaah=N'مهر' 
IF @shMonth=8 SET @shMaah=N'آبان' 
IF @shMonth=9 SET @shMaah=N'آذر' 
IF @shMonth=10 SET @shMaah=N'دی' 
IF @shMonth=11 SET @shMaah=N'بهمن' 
IF @shMonth=12 SET @shMaah=N'اسفند' 

IF @DayCnt=1 SET @shRooz=N'شنبه' 
IF @DayCnt=2 SET @shRooz=N'یکشنبه' 
IF @DayCnt=3 SET @shRooz=N'دوشنبه' 
IF @DayCnt=4 SET @shRooz=N'سه‌شنبه' 
IF @DayCnt=5 SET @shRooz=N'چهارشنبه' 
IF @DayCnt=6 SET @shRooz=N'پنجشنبه' 
IF @DayCnt=7 SET @shRooz=N'جمعه' 

--SET @DayDate = @shRooz + " " + LTRIM(STR(@shDay,2)) + " " + @shMaah + " " + STR(@shYear,4) 
--پنجشنبه 17 اردیبهشت 1394 

/* 
SET @DayDate = LTRIM(STR(@shDay,2)) + " " + @shMaah + " " + STR(@shYear,4) 
--17 اردیبهشت 1394 

SET @DayDate = STR(@shYear,4) + "/"+LTRIM(STR(@shMonth,2)) + "/" + LTRIM(STR(@shDay,2)) 
--1394/2/17 


--1394/02/17 
*/ 
SET @DayDate = REPLACE(RIGHT(STR(@shYear, 4), 4), ' ', '0') + '/'+ REPLACE(STR(@shMonth, 2), ' ', '0') + '/' + REPLACE((STR(@shDay,2)), ' ', '0') 
RETURN @DayDate 
END 

定製功能的結果非常簡單。 從通過:this page

相關問題