我正在尝试抓取current date
,week number
,first date in the week
和last date in the week
。它下面的SQL语句正在工作,但是当我在Oracle Apex中运行时,我得到ORA-01843: not a valid month
declare
date_value char;
week_value pls_integer;
start_date_value char;
end_date_value char;
begin
SELECT
TO_CHAR(TRUNC(TO_DATE(CURRENT_DATE,'MM/DD/YYYY')),'DD.MM.YYYY')
, TO_NUMBER(TO_CHAR(TO_DATE(CURRENT_DATE,'MM/DD/YYYY'),'WW'))
, TO_CHAR(TRUNC(TO_DATE(CURRENT_DATE,'MM/DD/YYYY'), 'IW'),'DD.MM.YYYY')
, TO_CHAR(NEXT_DAY(TRUNC(TO_DATE(CURRENT_DATE,'MM/DD/YYYY'),'IW'),'SUNDAY'),'DD.MM.YYYY')
INTO
date_value
, week_value
, start_date_value
, end_date_value
FROM DUAL;
htp.p('<< '||'Week'|| week_value ||' >> '|| start_date_value ||' - '|| end_date_value);
end;
还尝试使用sysdate并且仅在SQL中有效但在PL / SQL(Oracle Apex)页面中抛出相同的异常。 提前谢谢。
答案 0 :(得分:6)
您正在使用TO_DATE( date_string, format_model )
(而不是字符串)调用DATE
,这会导致Oracle使用{{1}将DATE
隐式转换为VARCHAR2
会话参数作为格式模型,因此您可以将其转换回NLS_DATE_FORMAT
。
所以查询:
DATE
有效:
TO_DATE(CURRENT_DATE,'MM/DD/YYYY')
如果TO_DATE(
TO_CHAR(
CURRENT_DATE,
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
),
'MM/DD/YYYY'
)
与NLS_DATE_FORMAT
匹配,那么您的查询将有效 - 格式不匹配,因此无效。
您应该做的是在MM/DD/YYYY
数据类型上使用TO_DATE
- 它已经是DATE
,因此您不需要。
DATE