使用异常处理创建 Sybase 函数

Create Sybase function with exception handling

我想创建函数以在创建视图时使用它。 在我的 table 中有一些字符串(字符串仅包含 8 位数字),我正在将其转换为 DATE。

我的函数是:

CREATE FUNCTION MY.FUNCTION(@date int)
  RETURNS DATE 
AS
BEGIN
  RETURN CONVERT(DATETIME, @date)
END

如果我像 SELECT FUNCTION('20170323') FROM TABLE 这样使用 smth,它会按预期工作。 但是如果我尝试像 SELECT FUNCTION('77777777') FROM TABLE 这样的 smth 它当然会失败......但是如果它失败我需要返回 NULL! 经过一番挖掘,我没有关于功能修改的结果。 如果失败,如何在我的函数中正确地将异常处理添加到 NULL 上的 return 日期?

使用 TRY_CONVERT 而不是 CONVERT,即:

CREATE FUNCTION TEST(@date varchar(50))
  RETURNS DATETIME 
AS
BEGIN
  RETURN TRY_CONVERT(DATETIME, @date)
END

结果:

select [dbo].[TEST]('20171201')  --output:2017-12-01 00:00:00.000
select [dbo].[TEST]('9999999999') --output: NULL

经过长时间的调查和大量的努力,我找到了解决方案:

CREATE FUNCTION MY_FUNCTION(@date CHAR(20))
  RETURNS DATE
AS
BEGIN
RETURN
(CASE
  WHEN ISDATE(@date) = 0
  THEN NULL
  ELSE CAST(@date AS DATE)
END)
END

在这种情况下,Sybase 方法 ISDATE() 发挥了所有作用而没有抛出异常...