我有值函數返回數據爲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
編輯:
從AakashM非常有益的幫助後,我所在行和值造成錯誤,它是試圖通過DD-MM-YYYY爲MM-DD-YYYY,工作,直到有一天一個價值超過12
要解決它,我只是改變了:
(SELECT CONVERT(DATETIME, UDEF_GetFromTextString('Date=', ',', RawData))) AS CallDate
要:
(SELECT CONVERT(DATETIME, UDEF_GetFromTextString('Date=', ',', RawData), 105)) AS CallDate
「它的失敗,如果返回值是空」 - 有什麼錯誤信息? – AakashM 2012-04-03 09:41:18
對問題添加了錯誤。 – bendataclear 2012-04-03 09:43:04