【发布时间】:2011-03-21 11:10:33
【问题描述】:
如何将 varchar 参数转换为日期时间,如果转换失败,则默认使用 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
【问题讨论】:
-
您期待任何特定的日期格式吗?或者它是开放的厚厚的? “2010 年 1 月 1 日”、“2011 年 12 月 13 日”、“2010.02.02”等?
-
udf 主要用于 excel 插件,我可以假装格式(02.12.2010)。
-
你可以假装,但是错误的 DATEFORMAT 设置会抛出 ISDATE,你可能有有效的日期被
getdate()替换
标签: sql sql-server-2005 tsql