2013-05-20 9 views
5

मैं 'इस प्रारूप को: 92/02/03' में परिवर्तित मेरी हिजरी शम्सी तारीख 92/2/3 चाहतेकन्वर्ट हिजरी शम्सी दिनांक स्वरूप TSQL

इस कोड के साथ

, मैं इस त्रुटि मिलती है : एक वेटर डेटा प्रकार के डेटा को डेटाटाइम डेटा प्रकार में परिवर्तित करने के परिणामस्वरूप ऑफ-ऑफ-रेंज मान होता है।

Declare @Str Varchar(10) = '92/2/3' 
Select Convert(Varchar(10), Convert(DateTime, @Str), 111) 

मैं तिथि का प्रारूप कैसे बदल सकता हूं?

उत्तर

2
  1. अपना रूपांतरण कोड के रूप में 11, नहीं 111 का उपयोग करना चाहिए जब से तुम सदियों की जरूरत नहीं है
  2. आप आंतरिक परिवर्तित में 11 उपयोग करने के लिए यह बताने के लिए क्या प्रारूप यह

    Declare @Str Varchar(10) = '92/2/3'  
    Select Convert(Varchar(10), Convert(DateTime, @Str,11), 11) 
    
    से परिवर्तित करने की आवश्यकता है
+0

धन्यवाद @ElectricLlama! –

0

आप समाधान नीचे देते हैं, जिनका उपयोग करके आप एसक्यूएल सर्वर 2012.

Declare @Str varchar(10) = '92/2/3'  
Select Format(Convert(Date, @Str,11),'yy/MM/dd') 
0 उपयोग कर रहे हैं

इमरान

1

आपके अनुरोध प्रारूप के साथ करने के लिए हिजरी (शम्सी) तिथि ग्रेगोरी तिथि परिवर्तित करने के लिए उपयोग इस कार्य:

CREATE FUNCTION [dbo].[ShamsiDate] 
     (
      @ChirsDate SMALLDATETIME 
     ) 
    RETURNS CHAR(10) 
    AS 
     BEGIN 
      DECLARE @SolarDate CHAR(10) 
      DECLARE @Day CHAR(2) 
      DECLARE @Mon CHAR(2) 
      DECLARE @SDay INT 
      DECLARE @SMon INT 
      DECLARE @SYear INT 
      SET @SYear = dbo.ShamsiDatePart(@ChirsDate, 'Y') 
      SET @SMon = dbo.ShamsiDatePart(@ChirsDate, 'M') 
      SET @SDay = dbo.ShamsiDatePart(@ChirsDate, 'D') 
      IF @SMon <= 9 
       SELECT @Mon = '0' + CONVERT(CHAR(1), @SMon) 
      ELSE 
       SELECT @Mon = CONVERT(CHAR(2), @SMon) 
      IF @SDay <= 9 
       SELECT @Day = '0' + CONVERT(CHAR(1), @SDay) 
      ELSE 
       SELECT @Day = CONVERT(CHAR(2), @SDay) 
      SELECT @SolarDate = CONVERT(CHAR(4), @SYear) + '/' + @Mon + '/' 
        + @Day 
      RETURN @SolarDate 
     END 

    CREATE FUNCTION [dbo].[ShamsiDatePart] 
     (
      @MiDate DATETIME , 
      @ADatePart CHAR 
     ) 
    RETURNS INT 
    AS 
     BEGIN 
      DECLARE @TmpY INT , 
       @Leap INT 
      DECLARE @Sh_Y INT , 
       @Sh_M INT , 
       @Sh_D INT , 
       @Result INT 
      IF @MiDate IS NULL 
       RETURN 0 
      DECLARE @Result INT 
      SET @Result = CONVERT(INT, CONVERT(FLOAT, @MiDate)) 
      IF @Result <= 78 
       BEGIN 
        SET @Sh_Y = 1278 
        SET @Sh_M = (@Result + 10)/30 + 10 
        SET @Sh_D = (@Result + 10) % 30 + 1 
       END 
      ELSE 
       BEGIN 
        SET @Result = @Result - 78 
        SET @Sh_Y = 1279 
        WHILE 1 = 1 
         BEGIN 
          SET @TmpY = @Sh_Y + 11 
          SET @TmpY = @TmpY - (@TmpY/33) * 33 
          IF (@TmpY <> 32) 
           AND ((@TmpY/4) * 4 = @TmpY) 
           SET @Leap = 1 
          ELSE 
           SET @Leap = 0 
          IF @Result <= (365 + @Leap) 
           BREAK 
          SET @Result = @Result - (365 + @Leap) 
          SET @Sh_Y = @Sh_Y + 1 
         END 
        IF @Result <= 31 * 6 
         BEGIN 
          SET @Sh_M = (@Result - 1)/31 + 1 
          SET @Sh_D = (@Result - 1) % 31 + 1 
         END 
        ELSE 
         BEGIN 
          SET @Sh_M = ((@Result - 1) - 31 * 6)/30 + 7 
          SET @Sh_D = ((@Result - 1) - 31 * 6) % 30 + 1 
         END 
       END 
      RETURN CASE @ADatePart WHEN 'Y' THEN @Sh_Y WHEN 'M' THEN @Sh_M WHEN 'D' THEN @Sh_D ELSE 0 END 
     END 
संबंधित मुद्दे