Reputation: 975
I have a question regarding date format error. So i have this query
SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')
and gives me ORA-01858: a non-numeric character was found where a numeric was expected
my table structure is this
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
Please help me with my issue with date format
Upvotes: 0
Views: 1535
Reputation: 49082
SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')
It makes no sense to use TO_DATE over a DATE column. You need TO_CHAR to display in the desired format using a proper 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>
The DATE datatype has both date and time elements,
SQL> SELECT to_char(SYSDATE, 'mm/dd/yyyy hh24:mi:ss') dt_tm FROM dual;
DT_TM
-------------------
02/06/2015 11:28:32
SQL>
If you want to use the DATE value in any date operation, then you don't have to convert it into anything at all, simply use the DATE value directly for date operations.
Update On OP's request about the query here http://pastie.org/9891465
In that query, you don't have to use TO_CHAR
in the sub-query. Use TO_CHAR
only in the main select since that is what will display the values. The start_date and end_dt in the sub-query is an INPUT to the outer query and should remain as DATE values and need not convert it into a 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;
Upvotes: 2