字符型日期转换日期型的非常数据定位与处理

由于数据的不规范性,造成日期类型转换异常。通过编写函数,找出异常值。

 1   CREATE OR REPLACE EDITIONABLE FUNCTION FUN_STR_TO_DATE (I_STR VARCHAR2)
 2 return DATE is
 3    V_DATE DATE;
 4 begin
 5   V_DATE:= TO_DATE(I_STR,‘YYYY/MM/DD‘) ; --单一格式
 6   REturn V_DATE;
 7 EXCEPTION
 8   WHEN OTHERS THEN
 9      select TO_DATE(‘99991231‘,‘YYYYMMDD‘) into V_DATE from dual;
10      return   V_DATE ;
11 end ;

或者:

 1   CREATE OR REPLACE EDITIONABLE FUNCTION FN_STR_TO_DATE (I_STR VARCHAR2)
 2 RETURN DATE IS
 3    V_DATE DATE;
 4 BEGIN
 5   if INSTR(I_STR,‘/‘) > 0 then
 6      SELECT TO_DATE(I_STR,‘YYYY/MM/DD‘) INTO V_DATE FROM DUAL;
 7    elsif INSTR(I_STR,‘-‘) > 0 then
 8      SELECT TO_DATE(I_STR,‘YYYY-MM-DD‘) INTO V_DATE FROM DUAL;
 9   else
10     SELECT TO_DATE(I_STR,‘YYYYMMDD‘) INTO V_DATE FROM DUAL;
11   end if;--多种格式的日期
12   RETURN V_DATE;
13 EXCEPTION
14   WHEN OTHERS THEN
15      SELECT TO_DATE(‘99991231‘,‘YYYYMMDD‘) INTO V_DATE FROM DUAL;
16      RETURN   V_DATE ;
17 END ;

异常数据都转换成 99991231,通过检索对比找到异常的源数据。

原文地址:https://www.cnblogs.com/DATABOOK/p/10222043.html

时间: 2024-08-03 06:14:01

字符型日期转换日期型的非常数据定位与处理的相关文章

ie8中parseInt字符型数值转换数值型问题

今天在ie8中测试项目发现一个奇怪的问题,"08" "09" 强转竟然变成了: 后来发现ie8把"08" "09" 默认转成了八进制:所以问题就找到了, 默认:parseInt("09", 8)  ==>  0  //返回八进制 解决办法: 1.parseInt("09", 10)  ==>  9   //返回十进制 2.parseFloat("09")

DB2中字符、数字和日期类型之间的转换

DB2中字符.数字和日期类型之间的转换 一般我们在使用DB2或Oracle的过程中,经常会在数字<->字符<->日期三种类 型之间做转换,那么在DB2和Oracle中,他们分别是如何实现的呢?在Oracle这几个类型之间的转换是十分方便的,通过 to_char|to_date|to_number函数即可完成类型转换.本小节主要介绍DB2中的一些知识,从Oracle转过来的DBA或开发人 员,可以对比着学习. 数字型到字符型的转换 DB2中的col_a字段 字段类型 到字符类型的转换

linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换

用域名获取IP地址或者用IP获取域名 #include<stdio.h> #include<sys/socket.h> #include<netdb.h> int main(int argc,char **aggv) { struct hostent *host; char hostname[]="www.163.com"; char hostname2[]="www.baidu.com"; struct in_addr in;

AngularJS:日期转换字符

JS有很多类库提供日期转换函数,AngularJS也不例外.可以通过$filter来完成转换,方法如下: $filter('date')(sourceDate, "yyyy/MM/dd") // yyyy/MM/dd指定转换的格式 So easy. AngularJS:日期转换字符

MySql存储日期为long型,判断时间大小

将4月20到当前时间段的销售状态全部改成未售(1),销售时间改成null(0) UPDATE hy_car_detail hcd SET hcd.sales_date = '',hcd.sales_status = '1' WHERE hcd.car_id IN ( SELECT hc.car_id FROM hy_car hc WHERE hc.car_date BETWEEN (SELECT UNIX_TIMESTAMP ('2016-04-20 00:00:00')) AND (SELEC

CAST CONVERT转换日期和时间数据类型

1 USE AdventureWorks2008R2; 2 GO 3 --CAST 4 5 SELECT 'CAST' "CAST", 6 CAST('1990-11-1' AS VARCHAR(10)) 转为字符串, 7 CAST('1990-11-1' AS DATETIME) 转为日期 8 9 --CONVERT 10 SELECT 'CONVERT' "CONVERT", 11 CONVERT(VARCHAR(10),'2999') 转为字符串, 12 CO

atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3. 调用代码 2 4. 责任链链的特性: 2 5. 模式结构 4 6. 职责链模式包含如下角色:Handler,ConcreteHandler: 具体处理者,HandlerChainUtil ,Client 4 7. 设置哈一个handler,,两个法:排序法,指定法 5 1. 指定法 5 2. 排

javaScript转换日期合格式

javascript如何将时间日期转换为Date对象:有时候需要讲一个字符串型的时间日期转换为Date时间对象,下面就通过一个简单的实例提供一种解决方案,当然也是一种思路,可以进行一定的变通,以达到举一反三的效果.例如这里有一个时间日期字符串: 2013-9-15 8:25:30 下面就将它们转换为时间对象.代码如下: var timeStr="2013-9-15 8:25:30"; var strArray=timeStr.split(" "); var strD

Sql 中常用日期转换Convert(Datetime)

CONVERT(data_type,expression[,style]) convert(varchar(10),字段名,转换格式) 说明:此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到. 语句 结果SELECT CONVERT(varchar(100), GETDATE(), 0) 07 15 2009 4:06PMSELECT CONVERT(varchar(100), GETD