Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
ВнизРазница между датами в Select-е Найти похожие ветки
← →
Элизабет (2002-04-17 16:42) [0]В некой табличке есть 2 поля формата даты + еще куча других полей. Мне нужно получить продолжительность = разницу между датами конца и начала. Можно ли это сделать?
← →
Johnmen (2002-04-17 16:54) [1]На уровне приложения - считать обе и получить разницу (которую можно преобразовать в количество мин , сек и т.д.)
← →
Johnmen (2002-04-17 16:59) [2]А вообще-то в Оракуле есть специальная ф-ия !
Изучай доки !
← →
Элизабет (2002-04-17 16:59) [3]А так никак не получится?
Мне бы хотелось еще суммировать длительности, сгруппировать прямо в запросе
← →
Wasp (2002-04-17 17:28) [4]А если просто вычесть одну дату из другой в запросе?
В Paradox"е такое срабатывает. Результат получается в днях. При желании можно перевести во что угодно - минуты, секунды...
← →
Johnny Smith (2002-04-17 17:32) [5]2Wasp
Вообще говоря, в Оракле так и делается...
← →
Reindeer Moss Eater (2002-04-17 17:44) [6]Разница в днях это легко
Select Trunc(Data1 - Data2)
в часах и минутах немного посложнее, но тоже реально
(substr + to_number)
← →
asafr (2002-04-17 17:44) [7]В MS SQL Server есть функция DATEDIFF... Ну уж в Оракле наверняка есть что-то похожее, а может и по-лучше...
← →
Lusha (2002-04-18 10:10) [8]Добавлю лишь, что дробная часть разницы (если даты содержат время) позволяет вычислить все и часы и минуты и секунды...
← →
Элизабет (2002-04-18 12:20) [9]Ok, попробую так
Спасибо всем за информацию
← →
{bas} (2002-04-18 13:43) [10]вооще то говоря с датами надо работать внимательно
и лучший способ работы с ним это 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 14:02) [11]Согласна, что надо аккуратно. С датами работать приходилось.
А тут столкнулась и со временем :-(Хотя сейчас задача на ходу меняется, придется все-таки обрабатывать в проге - добавилась еще куча всяких разбиений с учетом времени
← →
{bas} (2002-04-18 14:44) [12]просто тогда делаешь Trunc(,"hh") или Trunc(,"mi") или еще как
← →
Элизабет (2002-04-18 15:21) [13]Ok, все получилось
Всем спасибо!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c