2011-07-15 3 views
7

Tôi muốn chuyển đổi datetime của tôi thành datetime persian trong máy chủ sql. Datetime của tôi là ở định dạng MM/DD/YYYY. Có bất kỳ chức năng trong máy chủ sql để làm điều này là khi tôi muốn datetime Hijri tôi sử dụng nàyLàm thế nào để chuyển đổi datetime trong persian trong máy chủ sql

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

Tôi đang sử dụng sql server 2008

Trả lời

2

Ra khỏi hộp, không có.

Bạn sẽ phải viết UDF của riêng mình, tuy nhiên có một trên CodePlexanother

9

Tôi biết điều đó là quá muộn nhưng có lẽ hữu ích cho những người khác như tôi gặp khó khăn này.

Bạn nên viết một hàm SQL cho chuyển đổi này như thế này: Converting Gregorian to Persian Date

và sau đó sử dụng nó như thế này:

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

Tôi biết điều đó là quá muộn để trả lời câu hỏi này, nhưng tôi đã gửi chức năng mà tôi đang sử dụng trong một thời gian dài mà không có bất kỳ lỗi nào, tất cả các phương pháp khác mà tôi từng thấy có vấn đề với các năm liên tiếp:

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 

Thực sự dễ dàng tùy chỉnh kết quả của hàm. áp dụng từ: this page