我需要知道varchar类型列中的数据是否具有正确的日期格式。 我必须在DB2中做同样的事情。
我在java中通过在异常处理的帮助下使用SimpleDateFormat()和Date.Parse()函数来完成此操作。
我发布了我的java代码来验证字符串到目前为止
private boolean isValidDate(String date) {
try{
DateFormat d = new SimpleDateFormat("yyyyMMdd");
d.setLenient(false);
d.parse(date);
return true;
}
catch(Exception e){
return false;
}
}
但现在我必须在 DB2数据库中做同样的事情。可以使用DB2中的任何函数或进程
表格栏中的数据是这样的..
20140231
20000101
。
YYYYMMDD
和列类型为varchar
答案 0 :(得分:1)
我的展示日期的风格:
try
{
Date dob = new SimpleDateFormat("yyyy-MMM-dd").parse(request.getParameter("date"));
user.setDate(date);
}
catch(ParseException e)
{
e.printStackTrace();
}
注意:如果你应该像yyyy-MMM-dd或MM / dd / yyyy那样给予
您的计划:
private boolean isValidDate(String date)
{
try
{
DateFormat d = new SimpleDateFormat("MMM/dd/yyyy").parse(request.getParameter("date"));
d.setLenient(false);
d.parse(date);
return true;
}
catch(Exception e)
{
return false;
}
}
varchar的时间戳:
<强>时间戳的表达强>
一个表达式,它返回一个必须是DATE或TIMESTAMP的值,或者一个不是CLOB或DBCLOB的日期或时间戳的有效字符串表示形式。
如果参数是字符串,则还必须指定format-string参数。
在Unicode数据库中,如果提供的参数是数据,时间或时间戳的图形字符串表示,则在评估函数之前首先将其转换为字符串。
如果timestamp-expression是DATE或日期的有效字符串表示形式,则首先将其转换为TIMESTAMP(0)值,假设时间恰好是午夜(00.00.00)。
有关datetime值的字符串表示形式的有效格式,请参阅“Datetime values”中的“datetime values的字符串表示形式”。
<强>格式字符串强>
表达式必须返回一个值,该值是内置的CHAR,VARCHAR,numeric或datetime数据类型。
如果该值不是CHAR或VARCHAR数据类型,则在评估函数之前将其隐式转换为VARCHAR。
在Unicode数据库中,如果提供的参数是GRAPHIC或VARGRAPHIC数据类型,则在评估函数之前首先将其转换为VARCHAR。实际长度不得超过254个字节(SQLSTATE 22007)。
该值是一个模板,用于表示timestamp-expression的格式。
有效的格式字符串必须包含下面列出的格式元素的组合(SQLSTATE 22007)。
两个格式元素可以选择用以下一个或多个分隔符分隔:
minus sign (-)
period (.)
slash (/)
comma (,)
apostrophe (')
semi-colon (;)
colon (:)
blank ( )
请注意:
<强> 更新: 强>
示例代码1:将当前日期转换为YYYYMM格式
SELECT DATE_FORMAT(NOW(), '%Y%m');
o / p:#201403
示例代码2:将当前日期转换为YYYYMM格式
SELECT VARCHAR_FORMAT(CURRENT_DATE, 'YYYYMM') FROM jmail;
o / p#201403
样品:
No | MySQL | DB2 |SampleOutput
1 | DATE_FORMAT(NOW(), '%Y-%m-%d) | VARCHAR_FORMAT(CURRENT_DATE,'YYYY-MM-DD')| 2013-02-14
2 | DATE_FORMAT(NOW(), '%d/%m/%y')| VARCHAR_FORMAT(CURRENT_DATE,'DD/MM/RR') | 14/02/13
答案 1 :(得分:1)
不清楚&#34;味道&#34;需要DB2。使用DB2 for i,我可能会创建一个函数来进行测试并返回成功或失败的指示。这是一个适合我的例子:
DROP SPECIFIC FUNCTION SQLEXAMPLE.CHKVCDATE ;
SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","SQLEXAMPLE" ;
CREATE FUNCTION SQLEXAMPLE.CHKVCDATE (
VCDATE VARCHAR(20) )
RETURNS INTEGER
LANGUAGE SQL
SPECIFIC SQLEXAMPLE.CHKVCDATE
DETERMINISTIC
CONTAINS SQL
RETURNS NULL ON NULL INPUT
NO EXTERNAL ACTION
NOT FENCED
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *CHG ,
CLOSQLCSR = *ENDMOD ,
DECRESULT = (31, 31, 00) ,
DFTRDBCOL = *NONE ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *USER ,
SRTSEQ = *HEX
BEGIN ATOMIC
DECLARE CHKDATE DATE ;
DECLARE VALIDDATE INT ;
DECLARE NOT_VALID CONDITION FOR '22007' ;
DECLARE CONTINUE HANDLER FOR NOT_VALID
SET VALIDDATE = -1 ;
SET VALIDDATE = 0 ;
VALUES ( VCDATE ) INTO CHKDATE ;
RETURN VALIDDATE ;
END ;
COMMENT ON SPECIFIC FUNCTION SQLEXAMPLE.CHKVCDATE
IS 'Check VARCHAR for valid date' ;
可以删除或更改不适合您的特定DB2的任何属性或其他详细信息。 VCDATE VARCHAR
parm的大小可能需要调整,RETURN
值可以是您需要的任何值。该函数可能在WHERE
子句中有用。
我可以像这样调用它:
select sqlexample.chkvcdate('2014-02-29'), sqlexample.chkvcdate('2014-02-28') from sysibm.sysdummy1
第一个将返回(-1)表示无效值,第二个将返回(0)表示无效。