Oracle 用Oralce减去日期
我正试图用以下代码创建一个表。然而,我有问题减去其中一列的日期(是的,我已经尝试在网站上研究这个问题,但我仍然有问题) 每当我运行这段代码时,我都会收到以下错误:“AM/A.M.或PM/p.M.必填。”“AM”已经包含在内,所以我不确定哪里出了问题。有什么想法吗Oracle 用Oralce减去日期,oracle,plsql,Oracle,Plsql,我正试图用以下代码创建一个表。然而,我有问题减去其中一列的日期(是的,我已经尝试在网站上研究这个问题,但我仍然有问题) 每当我运行这段代码时,我都会收到以下错误:“AM/A.M.或PM/p.M.必填。”“AM”已经包含在内,所以我不确定哪里出了问题。有什么想法吗 CREATE TABLE FINAL AS select policy_id, ECY, TO_DATE(end_dt,'DD-MON-YY HH:MI:SS AM')
CREATE TABLE FINAL
AS
select
policy_id,
ECY,
TO_DATE(end_dt,'DD-MON-YY HH:MI:SS AM') - TO_DATE(start_dt,'DD-MON-YY HH:MI:SS AM') maxdays,
start_dt,
end_dt,
cancellation_date,
County
from counttable
where (Cancellation_Date is null or Cancellation_Date > &enddate)
and ECY > 0;
提前感谢您的帮助。如果您的start\u dt和end\u dt确实是VARCHAR列,那么我敢打赌您已经将日期格式字符串与一行或多行的引用弄乱了 运行这两个查询,看看我的意思:
--works ok
select to_date('01-jan-1901 12:34 pm', 'dd-mon-yyyy hh:mi am') from dual
--complains "am/pm required"
select to_date('01-jan-1901 12:34:56 pm', 'dd-mon-yyyy hh:mi am') from dual
简言之,它不是抱怨“您的日期格式字符串缺少AM/PM字段”,而是抱怨“在尝试将表数据解析为您提供的格式时,当您的日期格式字符串承诺我将找到AM/A.M./PM/p.M时,我在数据中遇到了“AM”或“PM”以外的内容。”
例如,在我上面的测试查询中,“表”中的数据包含时间结束时的56秒,但我的日期格式字符串向oracle承诺,它将在解析完分钟后立即在数据中找到AM/PM。本质上,我的日期格式字符串是假的
确保日期格式字符串准确地描述了字符串在每个表行中表示日期的方式。即使百万分之一的行中有违反格式的损坏数据,也会停止查询。这就是为什么最好将日期存储为datetime类型,而不是varchar
如果您的列不是VARCHAR,那么在to_DATE()开始工作之前,将进行一些到VARCHAR的隐式转换。如果您的列已经是日期,请选择“不确定日期”。如果它们不是VARCHAR(例如,如果它们是1970年1月1日午夜后分钟数的整数),则相应地处理它们-->将它们转换为日期,无论它们的表示方式需要什么开始和结束列的数据类型是什么?您的
enddate
变量定义为什么?您的会话的NLS_DATE_格式是什么?(为什么要在此时创建一个表作为数据的快照;您真的想要一个视图吗?AM不是一种格式,而是一个字符串。有一个特殊的关键字来处理AM和PM。您可以显示一些数据吗?还有什么数据类型是取消日期
,以及结束日期
是否包含引号?