Kin*_*des -1 sql db2 user-defined-functions case-statement ibm-midrange
我正在尝试为DB2创建用户定义的函数,但无法弄清楚.我对t-sql感觉更舒服,这将以十几种方式实现.我需要帮助,因为我收到的所有内容都是神秘的错误消息,告诉我没有有效的令牌或其他类似的令牌.
基本前提是我试图将正常日期转换为整个数据库中使用的日期格式(cyymmdd)这里是伪代码:
Get current time;
If YEAR(current time) > 1999 then 1 else 0;
Run Code Online (Sandbox Code Playgroud)
很简单吧?无法让它发挥作用.这是实际的代码:
DECLARE Cn CHAR ( 1 ) ;
CASE
WHEN YEAR(X) > 1999
THEN SET Cn = 1;
ELSE SET Cn = 0;
Run Code Online (Sandbox Code Playgroud)
还尝试过:
DECLARE Cn CHAR ( 1 ) ;
CASE YEAR(X)
WHEN > 1999
THEN SET Cn = 1;
ELSE SET Cn = 0;
Run Code Online (Sandbox Code Playgroud)
而那应该是悲惨的失败.
我真的不知道如何只用SQL将3/25/2014转换为1140325.我想我可以在应用程序逻辑中处理这个问题,但这不是我想要的方式.
提前致谢.
将DATE转换为CYMD是一个简单的计算:
SELECT (YEAR(CURRENT_DATE) - 1900) * 10000
+ MONTH(CURRENT_DATE) * 100
+ DAY(CURRENT_DATE)
FROM SYSIBM.SYSDUMMY1;
Run Code Online (Sandbox Code Playgroud)
用于执行转换的UDF:
CREATE FUNCTION QGPL.DATE2CYMD(DATE DATE) RETURNS DEC(7)
LANGUAGE SQL
DETERMINISTIC
BEGIN
RETURN (YEAR(DATE) - 1900) * 10000
+ MONTH(DATE) * 100
+ DAY(DATE);
END
Run Code Online (Sandbox Code Playgroud)
验证它是否正常工作的测试:
SELECT
QGPL.DATE2CYMD(CURRENT_DATE) CURRENT_CYMD,
QGPL.DATE2CYMD(CAST(NULL AS DATE)) NULL_CYMD
FROM SYSIBM.SYSDUMMY1;
Run Code Online (Sandbox Code Playgroud)
