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_dateend_dt 是外部查询的输入,应保持为 DATE 值,不需要 convertstring.

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;