我对日期格式错误有疑问。所以我有这个查询
SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')
并给我 ORA-01858:找到了一个非数字字符,其中包含数字
我的表结构是这个
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
请帮我解决日期格式问题
答案 0 :(得分:2)
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
。仅在主选择中使用TO_CHAR
,因为这将显示值。子查询中的 start_date 和 end_dt 是外部查询的INPUT,应保留为 DATE 值,无需转换将其改为字符串。
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;