id---DateBegin-------------DateEnd----------
6--18.06.2007 17:22:45--18.06.2007 17:23:47
Получение разницы между датами в нужном формате
Мне нужно сделать запрос в котором будет рассчитываться разница между двумя датами (БД ACCESS).
Содержимое полей:
Код:
Разница между датами в примере: 1 минута 2 секунды.
Соответственно запрос:
Код:
SELECT DateDiff('s', DateBegin, DateEnd) as [Разница] FROM Table1 WHERE id = 6
Возвратит число 62 (количество секунд).
Собственно вопрос...
Нужно получить разницу в формате: 00:01:02. Существует ли возможность сделать такое стандартными средствами, или же свою процедуру писать придется? Возможно ли это сделать в самом запросе (опять же функцией какой-либо)?
В стандартном SQL Access'а функции для нужного тебе форматирования нет. Единственный вариант, который приходит в голову - это применять форматирование на этапе прорисовки данных в гриде (ты же используешь DBGrid, не так ли?). Там можно форматировать данные как душе угодно. Смотри в хелпе по гриду события OnDrawColumnCell/OnDrawDataCell.
Цитата: makbeth
В стандартном SQL Access'а функции для нужного тебе форматирования нет. Единственный вариант, который приходит в голову - это применять форматирование на этапе прорисовки данных в гриде (ты же используешь DBGrid, не так ли?). Там можно форматировать данные как душе угодно. Смотри в хелпе по гриду события OnDrawColumnCell/OnDrawDataCell.
А MS SQL Server? Есть там подобная функция форматирования?
Цитата: makbeth
В стандартном SQL Access'а функции для нужного тебе форматирования нет. Единственный вариант, который приходит в голову - это применять форматирование на этапе прорисовки данных в гриде (ты же используешь DBGrid, не так ли?). Там можно форматировать данные как душе угодно. Смотри в хелпе по гриду события OnDrawColumnCell/OnDrawDataCell.
Как мне изменить значение ячейки? К примеру поле содержит значение '01':
Код:
--id---Наименование--Количество дней--
--1----{Наименование}--01
--1----{Наименование}--01
нужно отобразить '1 день' на момент прорисовки
Код:
--id---Наименование--Количество дней--
--1----{Наименование}--1 день
--1----{Наименование}--1 день
Пробую так:
Код:
if(Column.Title.Caption = 'Количество дней') then begin
Column.Field.Text := '1 день';
end;
Column.Field.Text := '1 день';
end;
в событии OnDBGrid_MainDrawColumnCell()
Ругается на то, что не может изменить данные, что правильно, конечно: изменить он не может.
А как же мне переписать отображаемое значение в самом гриде?
http://alglib.sources.ru/dates/difdmy.php
Вызывается и используется примерно так
DecodeDate(Form1.DateTimePicker1.Date,y1,m1,d1);
DecodeDate(Form1.DateTimePicker2.Date,y2,m2,d2);
DMYBetween(d1,m1,y1,d2,m2,y2,d,m,y);
Переменные в итоге типа integer
Можно изменить под свои потребности
Количество лет, месяцев и дней между двумя датами по ссылке
Вызывается и используется примерно так
DecodeDate(Form1.DateTimePicker1.Date,y1,m1,d1);
DecodeDate(Form1.DateTimePicker2.Date,y2,m2,d2);
DMYBetween(d1,m1,y1,d2,m2,y2,d,m,y);
Переменные в итоге типа integer
Можно изменить под свои потребности
Вот смотри: в обработчике тебе передается Rect - область прорисовки (прямоугольник, в котром надо рисовать), Column - ну ты уже понял, State - состояние ячейки (с помощью этого свойства ты можешь определить, в каком состоянии находится текущая ячейка - выделенная, в фокусе и т.д.)
Используй DBGrid.Canvas в этом обработчике для прорисовки.
Спасибо всем за помощь! Попробую разобраться.