Синтаксис SQL для запроса файла .dtq .dbf

Использование последней версии поставщика OLE DB Visual Fox Pro внутри Microsoft Visual Studio 2008 Pro Edition. Я не могу использовать функции SQL в своих файлах *.dtq. У меня есть более 181 файла *.dtq, которые мне в конечном итоге нужно вызывать из sqlscript, но моя проблема заключается в попытке проанализировать столбец в файле dbf. Столбец, который мне нужен, содержит время, т.е. ЧЧ:ММ:СС Мне нужно иметь возможность проанализировать столбец времени, чтобы получить только час или минуты. Минуты будут разделены на 15-минутные интервалы, поэтому, например, в течение 15 часов я могу извлекать данные, пока время > 0, но ‹ 15, чтобы я мог извлекать данные для 15-минутных интервалов. Обычно я использовал бы функцию, такую ​​​​как parse или parsname, или split, или decimal, или decim, или что-то, что говорит перейти к символьному пробелу #, а затем # символьные пробелы после этого. Как и в dos, я могу использовать %TIME:~3,2% для извлечения информации, которая мне нужна для минутного раздела столбца, содержащего нужную мне информацию о времени. Помогите пожалуйста мне. Заранее благодарю.


person Matt    schedule 28.01.2011    source источник


Ответы (1)


Хотя я не знаком напрямую с файлами .dtq (если только они не являются просто переименованными файлами .dbf), VFP имеет функции даты/времени для получения различных компонентов поля даты для вас. Однако не существует типа данных только для компонента "ВРЕМЯ". Обычно он просто хранится как строковый (символьный) столбец. Однако, если столбец содержит дату/время, вы можете использовать

HOUR( YourDateTimeColumn ) -- will return based on 24 hour clock... 1pm = 13, 2pm = 14, etc
MINUTE( YourDateTimeColumn )

Однако ваш пример показывает ЧЧ: ММ: СС, поэтому я собираюсь сохранить просто строку символов. Так что я бы справился...

select 
      val( left( YourTimeColumn, 2 )) as MyHour,
      val( substr( YourTimeColumn, 4, 2 )) as MyMinutes,
      int( val( substr( YourTimeColumn, 4, 2 )) / 15 ) as QtrMinute
   from
      YourTable

Немного отличается от ваших > 0 и ‹ 15, что представляет собой не настоящие 15 минут, а 14,

0 - 14 minutes = 1st quarter minute
15- 29 minutes = 2nd quarter minute
30- 44 minutes = 3rd quarter minute
45- 59 minutes = 4th quarter minute

Если вам нужны четверти на основе 1-15 минут, 16-30, 31-45, 46-60, измените на int( 1+val (...) as QtrMinute

person DRapp    schedule 06.02.2011