Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Oracle SQL验证txt文件中的日期?_Oracle - Fatal编程技术网

如何使用Oracle SQL验证txt文件中的日期?

如何使用Oracle SQL验证txt文件中的日期?,oracle,Oracle,我编写了一个SQL脚本,用于处理从外部源的逗号分隔双引号文本文件加载到保留表(通过sqlldr)中的日期。因此,无论txt文件中的数据类型是什么,保留表中列的类型都是VARCHAR2。这样,我就可以在将数据从保留表加载到主表(具有适当类型的列,例如日期、编号等)之前,对来自外部源的数据执行并记录验证,并报告问题 我使用正则表达式验证来检查日期是否为MM/DD/YYYY格式,但我需要的帮助是如何使用SQL验证语法正确的日期的逻辑有效性,例如闰年以及某个月是30天还是31天。有没有一种方法可以使用普

我编写了一个SQL脚本,用于处理从外部源的逗号分隔双引号文本文件加载到保留表(通过sqlldr)中的日期。因此,无论txt文件中的数据类型是什么,保留表中列的类型都是VARCHAR2。这样,我就可以在将数据从保留表加载到主表(具有适当类型的列,例如日期、编号等)之前,对来自外部源的数据执行并记录验证,并报告问题

我使用正则表达式验证来检查日期是否为MM/DD/YYYY格式,但我需要的帮助是如何使用SQL验证语法正确的日期的逻辑有效性,例如闰年以及某个月是30天还是31天。有没有一种方法可以使用普通SQL实现这一点?数据库是oracle11g

我研究了Oracle的to_date函数,它似乎非常适合我正在尝试做的事情,但我找不到一种方法将其结果放入查询中,而不是在遇到无效日期时崩溃。
感谢您在本主题中提供的帮助。

如果smth的日期错误,则返回null,您可以创建自己的函数

create or replace function my_to_date(dt varchar2) return date as
  ldt date;
begin
  ldt := to_date(dt, 'MM/DD/YYYY');
  return ldt;
exception when others then return null;

end;

select my_to_date('01/01/2012') from dual
union all
select my_to_date('33/01/2012') from dual

    MY_TO_DATE('01/01/2012')
1   01/01/2012
2   
或者您需要创建脚本,以便在导入后检查数据

但也许您可以在进口过程中进行检查?通过
到字符(到日期(…)…)
转换?如果smth与您的日期错误-sqlldr拒绝记录

sample record
7782, "Clark", "Manager", 7839,06/09/1981, 2572.50,, 10:101

sample control file

LOAD DATA 
CHARACTERSET utf16
BYTEORDER little
INFILE ulcase11.dat
REPLACE
INTO TABLE EMP
FIELDS TERMINATED BY X'002c' OPTIONALLY ENCLOSED BY X'0022'
(empno integer external (5), ename, job, mgr,
 hiredate DATE(20) "to_char(to_date(:HIREDATE, 'MM/DD/YYYY'),'MM/DD/YYYY')",
 sal, comm,
 deptno   CHAR(5) TERMINATED BY ":",
 projno,
 loadseq  SEQUENCE(MAX,1) )    
请参阅-编写一个pl/sql函数并在查询中调用它