【发布时间】:2015-02-23 22:48:21
【问题描述】:
我有一个水晶报表,它将日期传递给 SQL 查询 {?Date}
这在使用 ODBC 连接连接水晶时有效,但是在将其更改为“Oracle 服务器”连接时出现错误:
ORA-01861: literal does not match format string
我已尝试删除 to_char 或 to_date(根据研究,这似乎是问题的原因,但无济于事)
SELECT
ACTIVE_SEPARATE.WO_NO,
MCH_TYPE,
24 * (to_date(to_char(REAL_F_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS') - to_date(to_char(REQUIRED_START_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS')) as BREAKDOWN_HOURS,
(100 - (((24 * (to_date(to_char(last_day(to_date({?Month}, 'dd-mm-yyyy')),'DD-MM-YYYY'), 'DD-MM-YYYY') - to_date(to_char( trunc(to_date({?Month}, 'dd-mm-yyyy'), 'month'),'DD-MM-YYYY'), 'DD-MM-YYYY'))) + 24) - (24 * (to_date(to_char(REAL_F_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS') - to_date(to_char(REQUIRED_START_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS')))) / ((24 * (to_date(to_char(last_day(to_date({?Month}, 'dd-mm-yyyy')),'DD-MM-YYYY'), 'DD-MM-YYYY') - to_date(to_char( trunc(to_date({?Month}, 'dd-mm-yyyy'), 'month'),'DD-MM-YYYY'), 'DD-MM-YYYY'))) + 24)) AS PERCENTAGE_AVAILABILITY
FROM ACTIVE_SEPARATE
RIGHT JOIN EQUIPMENT_FUNCTIONAL ON EQUIPMENT_FUNCTIONAL.MCH_CODE = (SELECT DISTINCT CASE WHEN MCH_CODE LIKE '%-%' THEN TRIM(SUBSTR(MCH_CODE, 0, INSTR(MCH_CODE, '-')-1)) ELSE MCH_CODE END FROM ACTIVE_SEPARATE ACTIVE_SEPARATE_SUB WHERE ACTIVE_SEPARATE.MCH_CODE = ACTIVE_SEPARATE_SUB.MCH_CODE)
WHERE ERR_CLASS = '001'
AND MCH_TYPE IS NOT NULL
AND (ACTIVE_SEPARATE.REQUIRED_START_DATE BETWEEN
trunc({?Month}, 'MM')
AND
LAST_DAY({?Month}))
本质是用户输入了一个日期(任何日期)。此代码将采用日期。计算出所选月份的总小时数。
它还将通过将完成时间和开始时间彼此分开来计算故障时间。
最后,它将计算出当月的小时数 - 为我们提供可用小时数的停机时间。
【问题讨论】:
-
很难解决这个丑陋的代码。它是否给出错误的行号?您可以上传一些示例数据吗?如果我们必须将日期转换 3 次以获得 1 个值,我们需要看看它是从什么开始的。
-
没有行号。我知道代码很难看,我正在使用的架构很糟糕。我现在要编辑。
-
这是更大视图或查询的一部分吗?分解其中的一些部分并清楚地运行它们。例如执行这个:
select to_char(REAL_F_DATE,'DD-MM-YYYY HH24:MI:SS') from HISTORICAL_SEPARATE;重复这个直到你运行整个部分。 -
它不是更大的一部分。有趣的是,它可以在 Oracle SQL Dev 中运行,但在 Crystal 中运行时却不行。
-
Crystal 中设置的日期格式是什么?
标签: sql oracle plsql crystal-reports