DB2
环境函数实现如下:
CREATE OR REPLACE FUNCTION "GETISDATE" ( "VI_DATE" VARCHAR(20) )
RETURNS INTEGER
SPECIFIC "SQLXXXXXX"
LANGUAGE SQL
NOT DETERMINISTIC
EXTERNAL ACTION
READS SQL DATA
BEGIN
DECLARE V_DATE DATE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
RETURN 0;
IF LENGTH(VI_DATE) <> 8 THEN
RETURN 0;
END IF;
SET V_DATE = TO_DATE(VI_DATE,'YYYYMMDD');
IF V_DATE IS NULL THEN
SET V_DATE= CURRENT DATE;
END IF;
RETURN 1;
RETURNS TYPE :
所创建的函数返回的类型。
SPECIFIC "SQLXXXXXX"
:为函数指定特定的名称
SQLXXXXXX
。
DETERMINISTIC
:
指定是否每当以相同的一组输入参数执行函数时,都返回相同的结果。
确定性(
Deterministic
)函数包括数学函数和不依赖于表中数据或变化数据源的函数。
EXTERNAL ACTION:
指定函数对外部程序是否有影响。
READS SQL DATA
表示子程序包含读数据的语句,但不包含写数据的语句。另外两种函数与数据库交互方式为
CONTAINS
,
MODIFIES
。
DECLARE EXIT HANDLER FOR SQLEXCEPTION
:异常处理
,
当出现
SQL
错误的时候,中断程序执行过程,跳出存储过程
ORACLE
环境函数实现如下:
CREATE OR REPLACE FUNCTION GETISDATE(VI_DATE IN VARCHAR2)
RETURN INT
RESULT DATE;
BEGIN
RESULT:= TO_DATE(VI_DATE,'YYYYMMDD');
RETURN 1;
EXCEPTION
WHEN OTHERS THEN RETURN 0;
今天校验数据的时候,在A环境写了一个日期是否合法的校验函数,脚本正常执行,导入B环境,提示日期校验函数错误。分析很久,始终没有找到问题,最后才发现,原来A环境为DB2,B环境为ORACLE。在这两个环境下实现是否为日期的函数差别挺大,下面做一个简单的分析。DB2环境函数实现如下:CREATE OR REPLACE FUNCTION "GETISDATE" ( "VI
最近需要验证数据仓库某个字段
是否
转化成某种
日期
格式,比如时间戳格式 ‘2016-05-03 23:21:35.0‘,
但是
DB2
不支持REGEXP_LIKE(匹配)
函数
,所以需要重新想其他办法。
最后使用了最常规的like来模糊匹配,虽然比不上正则匹配那么精准,但也够用了。
一个下划线代表一个字符,那‘2016-05-03 23:21:35.0‘可以表示成'____-__-__-_...
date(trim(char(col_a)))
timestamp(trim(char(col_a)))或to_date(--string-expression,format-string(
DB2
9)
注:to_date实际是TIMESTAMP_FO
这边写一个
判断
一个
日期
的
合法
性,比如是没有2008-02-31,aaaa-03-89等都不
合法
的,这个Datetil在java中可以解决这样的一个问题,如果还有缺陷请相告,感谢!
import java.util.*;
import java.util.regex.*;
import java.text.*;
/** 这个是按照楼主的描述使用通过
判断
字符验证时间
合法
性 */
public cl
1、
db2
可以通过SYSIBM.SYSDUMMY1、SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值。
SELECT 'HELLO
DB2
' FROM SYSIBM.SYSDUMMY1;--HELLO
DB2
SELECT 'HELLO
DB2
' FROM SYSIBM.DUAL;--HELLO
DB2
VALUES 'HELLO
DB2
';...
char Cheack_date(short w_year,char w_month,char w_date)
unsigned char Month_buf[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (w_month==2)