Adi*_* N. 0 sql oracle plsql oracle-apex
我想取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;
Run Code Online (Sandbox Code Playgroud)
也尝试使用sysdate并且仅在SQL中有效但在PL/SQL(Oracle Apex)页面中抛出相同的异常.提前致谢.
你在呼唤TO_DATE( date_string, format_model )一个DATE(而不是字符串),这将导致甲骨文做的隐式转换DATE到VARCHAR2使用NLS_DATE_FORMAT会话参数作为格式的模型,所以您可以将其转换回DATE.
所以查询:
TO_DATE(CURRENT_DATE,'MM/DD/YYYY')
Run Code Online (Sandbox Code Playgroud)
有效:
TO_DATE(
TO_CHAR(
CURRENT_DATE,
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
),
'MM/DD/YYYY'
)
Run Code Online (Sandbox Code Playgroud)
如果NLS_DATE_FORMAT匹配,MM/DD/YYYY那么您的查询将起作用 - 格式不匹配,因此它不起作用.
你应该做的是没有使用TO_DATE上的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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
541 次 |
| 最近记录: |