在UDF中尝试/捕获不可能吗?如何"tryCast"varchar到datetime?

Tim*_*ter 2 sql t-sql sql-server-2005

如何将varchar参数转换为datetime,如果转换失败使用GetDate()默认值?我试图把它放在Try/Catch中,但显然这在UDF中不起作用.它也不能简单地检查datetime是否为null,因为它会抛出异常('将char数据类型转换为datetime数据类型导致超出范围的datetime值'):

CREATE FUNCTION [dbo].[getRZUInfo]
(
    @IMEI varchar(20),
    @StrDeliveryDate varchar(20)
)
RETURNS VARCHAR(8000)
AS
BEGIN
    DECLARE @Info VARCHAR(8000) 
    DECLARE @DeliveryDate datetime;
    SET @DeliveryDate = Convert(datetime,@StrDeliveryDate,102);
    IF @DeliveryDate IS NULL
        SET @DeliveryDate=GetDate();
    SELECT   @Info = COALESCE(@Info + '|', '') + 'TAT_B2B: ' + Convert(varchar,tabData.TAT_B2B) + ', AC' + Convert(varchar,tabData.fimaxActionCode) + ', Diff: ' + Convert(varchar,DateDiff(day,tabData.Received_date,@DeliveryDate))
        FROM   tabData
    WHERE     (SSN_Number = @IMEI) AND (Received_Date >= DATEADD(month, -3, @DeliveryDate))
    ORDER BY SSN_Number,Received_Date DESC
    return @Info
END
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 6

SET @DeliveryDate = CASE
                      WHEN Isdate(@StrDeliveryDate) = 1 THEN
                      CONVERT(DATETIME, @StrDeliveryDate, 102)
                      ELSE Getdate()
                    END  
Run Code Online (Sandbox Code Playgroud)