Problem:SQL Scalar Valued Function Return Null
ich eine Scalar Wertfunktion haben Daten als VARCHAR (MAX) oder NULL (Funktion unten) zurückkehrt, ich diese Funktion bin mit einem langen Textzeichenfolge und greifen zu explodieren einzelne Werte (von mehreren Datentypen).
Ich versuche jetzt, diese Daten in eine andere Tabelle einzufügen, aber in richtige Datentypen konvertiert, aber es schlägt fehl, wenn der zurückgegebene Wert Null ist.
Das Feld ist zu füllen Ich versuche DATETIME NULL
so, wenn die Funktion null zurück Ich möchte nur null wählen, sonst will ich die VARCHAR
zu einem DATETIME
konvertieren, so weit ich habe:
(SELECT CONVERT(DATETIME, dbo.UDEF_GetFromTextString('Date=', ',', RawData))) AS LineDate,
Was ich nicht tun kann, ist beide behandeln den Nullwert und konvertieren zu einem DATETIME
, kann jemand mir eine Linienfunktion geben, um dies zu tun (wenn möglich, ohne die Funktion zweimal aufzurufen)?
Fehler:
Msg 242, Level 16, State 3, Procedure UDEF_DC_TRANSLATE_CALL_DATA, Line 11
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.
UDEF_GetFromTextString FUNCTION
CREATE FUNCTION [dbo].[UDEF_GetFromTextString]
-- Input start and end and return value.
(@uniqueprefix VARCHAR(100),
@commonsuffix VARCHAR(100),
@datastring VARCHAR(MAX))
RETURNS VARCHAR(MAX) -- Picked Value.
AS
BEGIN
DECLARE @ADJLEN INT = LEN(@uniqueprefix)
SET @datastring = @datastring + @commonsuffix
RETURN (
CASE WHEN (CHARINDEX(@uniqueprefix,@datastring) > 0)
AND (CHARINDEX(@uniqueprefix + @commonsuffix,@datastring) = 0)
THEN SUBSTRING(@datastring, PATINDEX('%' + @uniqueprefix + '%',@datastring)[email protected], CHARINDEX(@commonsuffix,@datastring,PATINDEX('%' + @uniqueprefix + '%',@datastring))- PATINDEX('%' + @uniqueprefix + '%',@datastring)[email protected]) ELSE NULL END
)
END
Edit:
Nach der sehr nützliche Hilfe von AakashM, ich die Linie und Wert gelegt haben verursacht der Fehler war es Versuch passieren dd-mm-yyyy als mm-dd-yyyy, arbeiten, bis ein Wert für den Tag war über 12.
Um es zu beheben ich gerade geändert:
(SELECT CONVERT(DATETIME, UDEF_GetFromTextString('Date=', ',', RawData))) AS CallDate
An:
(SELECT CONVERT(DATETIME, UDEF_GetFromTextString('Date=', ',', RawData), 105)) AS CallDate
"Es schlägt fehl, wenn der zurückgegebene Wert null ist" - Was ist die Fehlermeldung? – AakashM
Fehler zu Frage hinzugefügt. – bendataclear