ORA-01858 错误信息
ORA-01858 Error Message
我有一个关于日期格式错误的问题。所以我有这个查询
SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')
并给我 ORA-01858:在需要数字的地方发现了一个非数字字符
我的table结构是这样的
PROJECT_START_DT PROJECT_END_DT JOB_NAME
2/5/2015 4/2/2015 W-IGG
2/18/2015 3/19/2015 W14056
2/5/2015 3/31/2015 W14013
请帮我解决日期格式问题
SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')
在 DATE 列上使用 TO_DATE 毫无意义。您需要 TO_CHAR 使用适当的 FORMAT MODEL.
以所需的格式显示
SQL> SELECT to_date(SYSDATE, 'mm/dd/yyyy') FROM dual;
SELECT to_date(SYSDATE, 'mm/dd/yyyy') FROM dual
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected
SQL>
SQL> SELECT to_char(SYSDATE, 'mm/dd/yyyy') FROM dual;
TO_CHAR(SY
----------
02/06/2015
SQL>
DATE 数据类型同时具有日期和时间元素,
SQL> SELECT to_char(SYSDATE, 'mm/dd/yyyy hh24:mi:ss') dt_tm FROM dual;
DT_TM
-------------------
02/06/2015 11:28:32
SQL>
如果你想在任何日期操作中使用DATE值,那么你根本不需要将其转换成任何东西,只需直接使用DATE值作为日期操作。
更新 根据 OP 关于此处查询的请求 http://pastie.org/9891465
在该查询中,您不必在 子查询 中使用 TO_CHAR
。仅在主 select 中使用 TO_CHAR
,因为这将显示值。子查询中的 start_date 和 end_dt 是外部查询的输入,应保持为 DATE 值,不需要 convert 成 string.
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, 'MM/DD/YYYY') START_WEEK_DATE,
TO_CHAR (start_date + (LEVEL) * 7, 'MM/DD/YYYY') END_WEEK_DATE
FROM
(SELECT PS.PROJECT_START_DT start_date,
PS.PROJECT_END_DT end_date
FROM PROJECT_SPAN PS
WHERE PS.JOB_NAME = 'W-IGG'
)
CONNECT BY start_date + (LEVEL - 1) * 7 < end_date;
我有一个关于日期格式错误的问题。所以我有这个查询
SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')
并给我 ORA-01858:在需要数字的地方发现了一个非数字字符
我的table结构是这样的
PROJECT_START_DT PROJECT_END_DT JOB_NAME
2/5/2015 4/2/2015 W-IGG
2/18/2015 3/19/2015 W14056
2/5/2015 3/31/2015 W14013
请帮我解决日期格式问题
SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')
在 DATE 列上使用 TO_DATE 毫无意义。您需要 TO_CHAR 使用适当的 FORMAT MODEL.
以所需的格式显示SQL> SELECT to_date(SYSDATE, 'mm/dd/yyyy') FROM dual;
SELECT to_date(SYSDATE, 'mm/dd/yyyy') FROM dual
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected
SQL>
SQL> SELECT to_char(SYSDATE, 'mm/dd/yyyy') FROM dual;
TO_CHAR(SY
----------
02/06/2015
SQL>
DATE 数据类型同时具有日期和时间元素,
SQL> SELECT to_char(SYSDATE, 'mm/dd/yyyy hh24:mi:ss') dt_tm FROM dual;
DT_TM
-------------------
02/06/2015 11:28:32
SQL>
如果你想在任何日期操作中使用DATE值,那么你根本不需要将其转换成任何东西,只需直接使用DATE值作为日期操作。
更新 根据 OP 关于此处查询的请求 http://pastie.org/9891465
在该查询中,您不必在 子查询 中使用 TO_CHAR
。仅在主 select 中使用 TO_CHAR
,因为这将显示值。子查询中的 start_date 和 end_dt 是外部查询的输入,应保持为 DATE 值,不需要 convert 成 string.
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, 'MM/DD/YYYY') START_WEEK_DATE,
TO_CHAR (start_date + (LEVEL) * 7, 'MM/DD/YYYY') END_WEEK_DATE
FROM
(SELECT PS.PROJECT_START_DT start_date,
PS.PROJECT_END_DT end_date
FROM PROJECT_SPAN PS
WHERE PS.JOB_NAME = 'W-IGG'
)
CONNECT BY start_date + (LEVEL - 1) * 7 < end_date;