2017-02-09 2 views
1

Hallo habe ich eine Funktion versucht, es von Oracle zu MS SQL zu konvertieren, aber ich erhalte falsche Syntax in der Nähe von ‚1‘ eine Zeile 7:MS SQL-Server-Funktion Intervall mit

IF @nPaysQuarterly = 0 BEGIN 
    -- If the base date is less than March 1st of the given year then the due date is for that year 
    -- Else the due date is for the year plus 1 
     If @dBaseDate < convert(DATETIME, '01-Mar-'+isnull(year(@dBaseDate), '')) BEGIN 
      SET @dDueDate = convert(DATETIME, '01-Mar-'+isnull(year(@dBaseDate), '')); 
     END 
     ELSE BEGIN SET @dDueDate = convert(DATETIME, '01-Mar-'+isnull(year(@dBaseDate), '')) + interval '1' year; 
     END 
    ELSE IF (@dBaseDate < @dAnnualDue1) BEGIN 
      SET @dDueDate = @dAnnualDue1; 
    ELSE IF (@dBaseDate < @dFirstQuarterDue) BEGIN 
      SET @dDueDate = @dFirstQuarterDue; 
    ELSE IF (@dBaseDate < @dSecondQuarterDue) BEGIN 
      SET @dDueDate = @dSecondQuarterDue; 
    ELSE IF (@dBaseDate < @dThirdQuarterDue) BEGIN 
      SET @dDueDate = @dThirdQuarterDue; 
    ELSE IF (@dBaseDate < @dAnnualDue) BEGIN 
      SET @dDueDate = @dAnnualDue; 
    END 

    RETURN AIP.GETNEXTBUSINESSDAY(@dDueDate) ; 
END; 

falsch Alles, was beim Hinzufügen von 1 Inkrement zum Jahr? Vielen Dank.

Antwort

1

Ich denke, das ist die Abfrage, die Sie suchen

IF (@nPaysQuarterly = 0) 
BEGIN 
    -- If the base date is less than March 1st of the given year then the due date is for that year 
    -- Else the due date is for the year plus 1 
     If (@dBaseDate < convert(DATETIME, '01-Mar-'+isnull(year(@dBaseDate), ''))) 
      BEGIN 
       SET @dDueDate = convert(DATETIME, '01-Mar-'+isnull(year(@dBaseDate), '')); 
      END 
     ELSE 
      BEGIN 
       SET @dDueDate = DATEADD(year,1,convert(DATETIME, '01-Mar-'+isnull(year(@dBaseDate), ''))); 
      END 

    IF (@dBaseDate < @dAnnualDue1) 
      SET @dDueDate = @dAnnualDue1; 
    ELSE IF (@dBaseDate < @dFirstQuarterDue) 
      SET @dDueDate = @dFirstQuarterDue; 
    ELSE IF (@dBaseDate < @dSecondQuarterDue) 
      SET @dDueDate = @dSecondQuarterDue; 
    ELSE IF (@dBaseDate < @dThirdQuarterDue) 
      SET @dDueDate = @dThirdQuarterDue; 
    ELSE IF (@dBaseDate < @dAnnualDue) 
      SET @dDueDate = @dAnnualDue; 
    END 

    RETURN AIP.GETNEXTBUSINESSDAY(@dDueDate) ; 
END; 

Sie DATEADD Funktion zu verwenden, haben ein Jahr zu Ihrem Datetime-Wert hinzuzufügen. Ein weiteres Problem ist, dass Sie nicht ein IF Statement mit einem ELSE IF

+0

starten, können Ihnen dankt es ging glatt, jetzt habe ich einen convertion Fehler an einer anderen Zeile für Datum convertion in Erklärungen zu Beginn erhalten: 'declare @ dAnnualDue1 DATETIME- = CONVERT (DATETIME, @nYear, '') + '/ 03/1'; ' eine Idee, was das brachte? Fehler sagt: Argument Datentyp Varchar ist ungültig für Argument 3 der Funktion konvertieren. –

+0

Verwenden Sie 'convert (Datetime, Cast (@nYear as varchar (4) + '/ 03/01')' anstelle davon – Hadi

+0

Ich benutze es: 'DECLARE @ dAnnualDue1 DATETIME = konvertieren (Datetime, Cast (@nYear als varchar (4) + '/ 03/01'); 'aber erhalte Fehlersyntax bei '+', –

Verwandte Themen