Подтвердить что ты не робот

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

4b9b3361

Ответ 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
   ...