Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разница между датами в Select-е [D5, Oracle]


Элизабет ©   (2002-04-17 16:42:00) 

В некой табличке есть 2 поля формата даты + еще куча других полей. Мне нужно получить продолжительность = разницу между датами конца и начала. Можно ли это сделать?


Элизабет   (2002-04-18 15:21:00) [1]

Ok, все получилось
Всем спасибо!


{bas}   (2002-04-18 14:44:00) [2]

просто тогда делаешь Trunc(,"hh") или Trunc(,"mi") или еще как


Элизабет   (2002-04-18 14:02:00) [3]

Согласна, что надо аккуратно. С датами работать приходилось.
А тут столкнулась и со временем :-(Хотя сейчас задача на ходу меняется, придется все-таки обрабатывать в проге - добавилась еще куча всяких разбиений с учетом времени


{bas}   (2002-04-18 13:43:00) [4]

вооще то говоря с датами надо работать внимательно
и лучший способ работы с ним это TRUNC
вот пример:

create TABLE kal(id NNUMBER(10), name VARCHAR2(255), CrDate DATE) Primary key id;
надо выбрать все записи, кот. находятся в диапазоне 10.04.2002 и 18.04.2002

select *
from kal
where crdate >= to_date("10.04.2002", "dd.mm.yyyy")
and crdate <= to_date("18.04.2002", "dd.mm.yyyy")

Если идет как параметр из делфей(TDateTime)(тем более если поле CrDate проиндексировано)

select *
from kal
where crdate >= TRUNC(:BegDate, "dd")
and crdate <= TRUNC(:EndDate, "dd")

если за конкретное число(10.04.2002) и оно идет как параметр из делфей(TDateTime)
то лучше делать так(тем более если поле CrDate проиндексировано)

select *
from kal
where crdate between TRUNC(:inDate, "dd") and (TRUNC(:inDate, "dd")+1)/* (TRUNC(:inDate, "dd")+1) - это передаваемый день плюс 1день*/

TRUNC(to_date("10.04.2002 12:24:22", "d.mm.yyyy hh24:mi:ss"), "dd") <==> "10.04.2002 00:00:00"


Элизабет   (2002-04-18 12:20:00) [5]

Ok, попробую так
Спасибо всем за информацию


Lusha   (2002-04-18 10:10:00) [6]

Добавлю лишь, что дробная часть разницы (если даты содержат время) позволяет вычислить все и часы и минуты и секунды...


Reindeer Moss Eater   (2002-04-17 17:44:00) [7]

Разница в днях это легко
Select Trunc(Data1 - Data2)
в часах и минутах немного посложнее, но тоже реально
(substr + to_number)


asafr   (2002-04-17 17:44:00) [8]

В MS SQL Server есть функция DATEDIFF... Ну уж в Оракле наверняка есть что-то похожее, а может и по-лучше...


Johnny Smith   (2002-04-17 17:32:00) [9]

2Wasp
Вообще говоря, в Оракле так и делается...


Wasp   (2002-04-17 17:28:00) [10]

А если просто вычесть одну дату из другой в запросе?
В Paradox"е такое срабатывает. Результат получается в днях. При желании можно перевести во что угодно - минуты, секунды...


Johnmen   (2002-04-17 16:59:00) [11]

А вообще-то в Оракуле есть специальная ф-ия !
Изучай доки !


Элизабет   (2002-04-17 16:59:00) [12]

А так никак не получится?
Мне бы хотелось еще суммировать длительности, сгруппировать прямо в запросе


Johnmen   (2002-04-17 16:54:00) [13]

На уровне приложения - считать обе и получить разницу (которую можно преобразовать в количество мин , сек и т.д.)


Наверх

Титульная страница Поиск, карта сайта Написать письмо