Выдает дату только с заданной отметки времени в оракуле sql

Следующий запрос:

select cdate from rprt where cdate <= TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS') and ryg='R' and cnum='C002';

return: 2013/04/27-10:06:26:794 как хранится в таблице.

Я хочу получить дату только как: 27-04-2013 и получить количество дней между resul tdate и sysdate.

Ответ 2

Это именно то, для чего TO_DATE() предназначен для: преобразования временной метки на дату.

Просто используйте TO_DATE(sysdate) вместо TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS').

демоверсия SQLFiddle

UPDATE

В вашем обновлении столбец cdate не является реальным типом DATE или TIMESTAMP, а VARCHAR2. Не очень хорошая идея использовать типы строк для хранения дат. Очень неудобно и медленно искать, сравнивать и делать все другие виды математики по датам.

Вы должны преобразовать свое поле cdate VARCHAR2 в реальный TIMESTAMP. Предполагая, что для этого поля нет других пользователей, кроме вашего кода, вы можете преобразовать cdate в timestamp следующим образом:

BEGIN TRANSACTION;
-- add new temp field tdate:
ALTER TABLE mytable ADD tdate TIMESTAMP;
-- save cdate to tdate while converting it:
UPDATE mytable SET tdate = to_date(cdate, 'YYYY-MM-DD HH24:MI:SS');

-- you may want to check contents of tdate before next step!!!

-- drop old field
ALTER TABLE mytable DROP COLUMN cdate;
-- rename tdate to cdate:
ALTER TABLE mytable RENAME COLUMN tdate TO cdate;
COMMIT;

SQLFiddle Demo

Ответ 3

попробуйте этот тип формата:

SELECT to_char(sysdate,'dd-mm-rrrr') FROM dual

Ответ 4

Преобразовать временную метку в Date, как указано ниже, она будет работать точно -

select TO_DATE(TO_CHAR(TO_TIMESTAMP ('2015-04-15 18:00:22.000', 'YYYY-MM-DD HH24:MI:SS.FF'),'MM/DD/YYYY HH24:MI:SS'),'MM/DD/YYYY HH24:MI:SS') dt from dual

Ответ 5

Этот формат работал у меня, для указанного формата даты, т.е. MM/DD/YYYY

SELECT to_char(query_date,'MM/DD/YYYY') as query_date 
FROM QMS_INVOICE_TABLE;

Ответ 6

Если вы хотите, чтобы значение из столбца временной метки возвращалось в качестве типа даты, используйте примерно следующее:

select trunc(my_timestamp_column,'dd') as my_date_column from my_table;