Oracle SQL как удалить время с даты
У меня есть столбец с именем StartDate
, содержащий дату в этом формате: 03-03-2012 15:22
Мне нужно перевести его на сегодняшний день. Он должен выглядеть следующим образом: DD/MM/YYYY
Я пробовал без успеха:
select
p1.PA_VALUE as StartDate,
p2.PA_VALUE as EndDate
from WP_Work p
LEFT JOIN PARAMETER p1 on p1.WP_ID=p.WP_ID AND p1.NAME = 'StartDate'
LEFT JOIN PARAMETER p2 on p2.WP_ID=p.WP_ID AND p2.NAME = 'Date_To'
WHERE p.TYPE = 'EventManagement2'
AND TO_DATE(p1.PA_VALUE, 'DD/MM/YYYY') >= TO_DATE('25/10/2012', 'DD/MM/YYYY')
AND TO_DATE(p2.PA_VALUE, 'DD/MM/YYYY') <= TO_DATE('26/10/2012', 'DD/MM/YYYY')
Есть ли способ сделать это?
EDIT1: столбец PA_VALUE
: VARCHAR2
Ответы
Ответ 1
Когда вы конвертируете свою строку в дату, вам нужно сопоставить маска даты с форматом в строке. Это включает элемент времени, который нужно удалить с усечением:
select
p1.PA_VALUE as StartDate,
p2.PA_VALUE as EndDate
from WP_Work p
LEFT JOIN PARAMETER p1 on p1.WP_ID=p.WP_ID AND p1.NAME = 'StartDate'
LEFT JOIN PARAMETER p2 on p2.WP_ID=p.WP_ID AND p2.NAME = 'Date_To'
WHERE p.TYPE = 'EventManagement2'
AND trunc(TO_DATE(p1.PA_VALUE, 'DD-MM-YYYY HH24:MI')) >= TO_DATE('25/10/2012', 'DD/MM/YYYY')
AND trunc(TO_DATE(p2.PA_VALUE, 'DD-MM-YYYY HH24:MI')) <= TO_DATE('26/10/2012', 'DD/MM/YYYY')
Ответ 2
Вы можете использовать TRUNC в DateTime, чтобы удалить временную часть DateTime. Итак, ваше предложение where может быть:
AND TRUNC(p1.PA_VALUE) >= TO_DATE('25/10/2012', 'DD/MM/YYYY')
Функция TRUNCATE (datetime) возвращает дату с временной частью день, усеченный до единицы, заданной моделью формата.
Ответ 3
Try
SELECT to_char(p1.PA_VALUE,'DD/MM/YYYY') as StartDate,
to_char(p2.PA_VALUE,'DD/MM/YYYY') as EndDate
...