2017-06-27 13 views
1

Dies scheint ein Fehler in SQL Server selbst zu sein. Ich habe eine sehr einfache Funktion, deren Aufgabe es ist, try_convert(datetime, string arg) zu emulieren, da mein Kunde es nicht erlaubt, die Datenbank auf die Kompatibilität mit SQL Server 2012 einzustellen.Konvertierung beim Konvertieren von varchar in datetime fehlgeschlagen

extrahiert ich den Start der Funktion und der Testabfrage, wie folgt:

create function spTryConvertDateTime (@pString varchar(255)) 
returns datetime 
as 
begin 
    declare @iresult datetime = null; 
    declare @string varchar(255) = ltrim(rtrim(isnull(@pString, ''))); 
    declare @datestring varchar(255); 
    declare @timestring varchar(255); 

    if len(@string) < 10 
     return @iresult; 

    set @datestring = left(@string, 10); 

    if len(@string) >= 19 
     set @timestring = substring(@string, 11, len(@string-10)); 

    return null; 
end; 
go 

declare @v varchar(32) = '2017-10-31 00:00:00'; 
select dbo.spTryConvertDateTime(@v); 

Wenn ich versuche, dies zu laufen, bekomme ich folgende Fehlermeldung:

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value '2017-10-31 00:00:00' to data type int.

??? Wo versuche ich ALLES in den Datentyp int zu konvertieren?

Was ist los? Was vermisse ich?

Antwort

1

Sie haben diesen Code tief in der Funktion:

len(@string-10) 

(Dies ist das Ende der letzten Zeile vor dem return NULL.)

Sie können nicht mehr als 10 subtrahieren aus einem String. Daher der Versuch, es in eine Ganzzahl umzuwandeln.

+0

DOH! Danke - ich weiß nicht wie lange ich das angestarrt habe und es nicht gesehen habe. –

Verwandte Themen