В моем SQL-запросе в Access 2000 у меня есть поле, содержащее такие числа, как:

  • 0,15
  • 1,30
  • 1
  • 0,50

Где x - час, а xx - минуты.

Мне нужно преобразовать это поле в поле DateTime (или эквивалент в Access), потому что позже мне нужно будет суммировать значения времени в отчете.

Как я могу преобразовать это поле в DateTime?

0
Tommy Jakobsen 1 Июл 2009 в 14:05

3 ответа

Лучший ответ

Предполагая, что ваш столбец с числовыми данными называется "Num_Time", вы можете использовать этот запрос для получения столбца Date с этой информацией о времени:

select CDate(CStr(Fix(Num_Time)) + ':' + 
   CStr(CLng((sgn(Num_Time) * Num_Time - Fix(Num_Time)) * 100)) + ':00') as RealTime
from myTable

Запрос преобразует ваш столбец в строку формата «чч: мм: сс», которую можно передать функции CDate, чтобы получить объект Date с заданным временем. (Запрос не обрабатывает пустые или недопустимые значения в столбце.)

0
MicSim 1 Июл 2009 в 14:49
Это возвращает: RealTime 3:00:00 PM #Error 10:00:00 AM #Error
 – 
JeffO
1 Июл 2009 в 23:15

Чтобы построить значение DATETIME, вам нужна дата (!!)

Я не уверен, что вы точно используете, но для агрегирования значений вы могли бы рассмотреть возможность использования значения INTEGER определенной временной гранулы, например минут:

• 0,15  ->  15
• 1,30  ->  90
• 1     ->  60
• 0,50  ->  50
0
onedaywhen 1 Июл 2009 в 15:27

Если у вас время превышает день, не уверен, что для вас будет иметь datetime. Вам нужно получить общее количество минут и преобразовать в часы: минуты.

Select
    CInt(Left([Num_Time],InStr([Num_Time],",")))*60 + CInt(Right([Num_Time],Len([Num_Time])-InStr([Num_Time],","))) as [Total_Minutes]
    From [Your_Table]

Это превратит ваши часы в минуты плюс другие минуты. Теперь вам просто нужно вернуть сумму всех минут обратно в часы.

0
JeffO 1 Июл 2009 в 23:27