[英]ORA-01843: not a valid month with valid SQL query
我正在嘗試獲取current date
, week number
, 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)頁面中會引發相同的異常。 提前致謝。
您正在調用帶有DATE
(不是字符串)的TO_DATE( date_string, format_model )
,這會導致Oracle使用NLS_DATE_FORMAT
會話參數作為格式模型將DATE
隱式轉換為VARCHAR2
,從而可以將其轉換回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
匹配,則您的查詢將有效-格式不匹配,因此無效。
您應該做的是不在DATE
數據類型上使用TO_DATE
它已經是DATE
所以您不需要這樣做。
declare
date_value char(10) := TO_CHAR( CURRENT_DATE, 'DD.MM.YYYY' );
week_value pls_integer := TO_NUMBER(TO_CHAR(CURRENT_DATE,'WW'));
start_date_value char(10) := TO_CHAR(TRUNC(CURRENT_DATE, 'IW'),'DD.MM.YYYY');
end_date_value char(10) := TO_CHAR(NEXT_DAY(TRUNC(CURRENT_DATE,'IW'),'SUNDAY'),'DD.MM.YYYY');
begin
htp.p('<< '||'Week'|| week_value ||' >> '|| start_date_value ||' - '|| end_date_value);
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.