Проблема:SQL Скалярная функция Вернуться Null
У меня есть скалярные значения Функция возвращает данные как VARCHAR (MAX) или NULL (функция ниже), я использую эту функцию, чтобы взорвать длинную текстовую строку и захватить одиночные значения (из нескольких типов данных).
Теперь я пытаюсь вставить эти данные в другую таблицу, но преобразуется в соответствующие типы данных, но не работает, если возвращаемое значение равно null.
поле я пытаюсь заполнить это DATETIME NULL
так, если функция возвращает нулевое значение, я хочу, чтобы просто выбрать нуль, в противном случае я хочу, чтобы преобразовать VARCHAR
в DATETIME
, до сих пор у меня есть:
(SELECT CONVERT(DATETIME, dbo.UDEF_GetFromTextString('Date=', ',', RawData))) AS LineDate,
То, что я не могу сделать, - это обработать нулевое значение и преобразовать в DATETIME
, может ли кто-нибудь дать мне функцию линии, чтобы сделать это (если возможно, не вызывая функцию дважды)?
Ошибка:
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 ФУНКЦИЯ
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:
После очень полезной помощь AakashM, я расположена линия и значение вызывает ошибка, это было пытается передать дд-мм-гггг, как дд-мм-гггг, работает до тех пор значение в течение дня было более 12
Чтобы устранить это, я просто изменил:
(SELECT CONVERT(DATETIME, UDEF_GetFromTextString('Date=', ',', RawData))) AS CallDate
To:
(SELECT CONVERT(DATETIME, UDEF_GetFromTextString('Date=', ',', RawData), 105)) AS CallDate
«он не работает, если возвращаемое значение равно нулю» - что сообщение об ошибке? – AakashM
Добавлена ошибка. – bendataclear