使用异常处理创建 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() 发挥了所有作用而没有抛出异常...
我想创建函数以在创建视图时使用它。 在我的 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() 发挥了所有作用而没有抛出异常...