Выдает дату только с заданной отметки времени в оракуле 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.
Ответы
Ответ 1
Используйте функцию cast() для преобразования из временной метки на дату
select to_char(cast(sysdate as date),'DD-MM-YYYY') from dual;
Для получения дополнительной информации о функции cast oracle11g http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions016.htm#SQLRF51256
Ответ 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;