【发布时间】:2015-02-06 04:08:50
【问题描述】:
我有一个关于我的分析编程的问题。我已经有一个查询来显示一年中的周数。但是当我需要总结有关每周发生的值时,我陷入了困境。所以这是我的 SQL 代码,
SELECT LEVEL WEEK_NUM_INCR,
TO_CHAR (start_date + (LEVEL - 1) * 7, 'WW') WEEK_POSITION /* WEEK POSITION FOR THE WHOLE YEAR */
,
TO_CHAR (start_date + (LEVEL - 1) * 7, 'DD-MM-YYYY') START_WEEK_DATE,
TO_CHAR (start_date + (LEVEL) * 7, 'DD-MM-YYYY') END_WEEK_DATE,
(SELECT SUM(ONSITE_UPD_QTY) FROM DTL_ERC_UPD@WELTES_SITEMON_LINK WHERE UPD_DATE BETWEEN
TO_CHAR (start_date + (LEVEL) * 7, 'MM/DD/YYYY') AND TO_CHAR (start_date + (LEVEL) * 7, 'MM/DD/YYYY') CONNECT BY start_date + (LEVEL - 1) * 7 < end_date)
FROM (SELECT TO_DATE ('01/01/2015', 'MM/DD/YYYY') start_date,
TO_DATE ('12/31/2015', 'MM/DD/YYYY') end_date
FROM DUAL)
CONNECT BY start_date + (LEVEL - 1) * 7 < end_date;
它会显示星期,但是当我将这部分添加到我现在拥有的中间时,
(SELECT SUM(ONSITE_UPD_QTY) FROM DTL_ERC_UPD@WELTES_SITEMON_LINK WHERE UPD_DATE BETWEEN
TO_CHAR (start_date + (LEVEL) * 7, 'MM/DD/YYYY') AND TO_CHAR (start_date + (LEVEL) * 7, 'MM/DD/YYYY') CONNECT BY start_date + (LEVEL - 1) * 7 < end_date)
它会抛出这些错误, ORA-01843: 无效月份 ORA-02063: 来自 WLTES_SITEMON_LINK 的前一行
所以对于 DTL_ERC_UPD,我有
ONSITE_UPD_QTY UPD_DATE
1 2/5/2015 12:00:01 AM
1 2/5/2015 12:00:01 AM
1 2/4/2015
1 2/4/2015
1 2/4/2015
我希望它会在 2 月 1 日至 8 日期间显示 5,而在该行的其余部分显示 0。
请帮我解决这个问题
【问题讨论】:
-
这是由your next question 回答的,对吧?确实是同一个问题,当您真正想作为日期进行比较时应用
to_char(),这会导致隐式转换? -
@AlexPoole 是的,但是在改进它们并为每个日期范围实现子查询时遇到问题
-
抱歉,我不确定你的意思。通常,仅在选择列表中使用
to_char将日期转换为字符串fo display,而不是在比较 where 或 join 子句中的值时。并且只能使用to_date将字符串转换为日期类型。如果您已经有日期,请勿将其转换为比较或操作,将其保留为日期。