Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Вниз

Преобразование формата    Найти похожие ветки 

 
SerjKo   (2002-10-24 15:06) [0]

Уважаемые господа дело вот в чем:
у меня есть два поля типа DATE (<дата поступления на работу>
и <текущая дата>).
Нужно найти стаж работы.

Я делаю так:
select <текущая дата> - <дата поступления на
работу> from <имя б/д>

Результат получается в днях.

А как получить результат в годах (кроме как <результат>/365)???


 
gek   (2002-10-24 15:09) [1]

div


 
Val   (2002-10-24 15:10) [2]

тип СУБД??


 
SerjKo   (2002-10-24 15:16) [3]

Я пишу запрос на Делфях.


 
stone   (2002-10-24 15:19) [4]

Не важно в чем ты пишешь запрос, к какому типу БД ты обращаешься?


 
MsGuns   (2002-10-24 15:19) [5]

>SerjKo (24.10.02 15:16)
>Я пишу запрос на Делфях.

... и работаю в ОС Delphi ;)



 
sniknik   (2002-10-24 15:32) [6]

все тут в основном в дельфях но базы разные, для MSSQL
запрос с использованием
DATEDIFF
Returns the number of date and time boundaries crossed between two specified dates.

Syntax
DATEDIFF ( datepart , startdate , enddate )

Arguments
datepart

Is the parameter that specifies on which part of the date to calculate the difference. The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.



 
Anatoly Podgoretsky   (2002-10-24 15:44) [7]

SerjKo (24.10.02 15:06)
Только вот в году не 365 дней, а 365.25 и то приблизительно


 
SerjKo   (2002-10-24 16:01) [8]

Я составляю SQL-запрос и обращаюсь к б/д типа dBase.


 
MsGuns   (2002-10-24 16:17) [9]

Через Local SQL (если исп-ся TQuery из закладки Дельфей BDE) можно так
SELECT (CAST(EXTRACT(YEAR FROM A.DateLast) as INTEGER)*12+
CAST(EXTRACT(MONTH FROM A.DateLast) as INTEGER)) -
(CAST(EXTRACT(YEAR FROM A.DateFirst) as INTEGER)*12+
CAST(EXTRACT(MONTH FROM A.DateFirst) as INTEGER)) as DifByMon,
CAST(CAST(EXTRACT(YEAR FROM A.DateLast) as INTEGER)*12+
CAST(EXTRACT(MONTH FROM A.DateLast) as INTEGER)) -
(CAST(EXTRACT(YEAR FROM A.DateFirst) as INTEGER)*12+
CAST(EXTRACT(MONTH FROM A.DateFirst) as INTEGER))/12 as INTEGER) as DifByYr,
FROM MyTable A


Т.е. разность определяется в кол-ве ПОЛНЫХ годов и ПОЛНЫХ месяцев (правда, на 1 месяц больше или на 2) - для определения стажа вполне подойдет, т.к. там считают годы или месяцы только в первом году (в основном для предоставления первого оплачиваемого отпуска)




 
sniknik   (2002-10-24 16:47) [10]

MsGuns © (24.10.02 16:17) а так получится ?
SELECT EXTRACT(YEAR FROM A.DateLast-A.DateFirst) AS "YEARS_STAG",
EXTRACT(MONTH FROM A.DateLast-A.DateFirst) AS "MONTH_STAG"
FROM MyTable A


(я конечно счас попробую)


 
sniknik   (2002-10-24 16:59) [11]

Не работает :((. типы надо приводить всетаки локал SQL...


 
SerjKo   (2002-10-24 17:03) [12]

А если я использую TADOQuery?


 
sniknik   (2002-10-24 17:12) [13]

Ключевое слово здесь не TADOQuery, Query а BDE,Local SQL :-))

вот примернно если через ADO, Jet к базе Access запрос
SELECT YEAR(Now()-childdate)-1900 AS "Year", Month(Now()-childdate) AS "Month" FROM 1scrdoc


 
SerjKo   (2002-10-24 17:36) [14]

Дело в том, что я использую ODBC для TADOQuery


 
sniknik   (2002-10-24 19:29) [15]

Дело в том что ты путаеш понятия :О) (и тут пальцы врастопырку!!:))))

ODBC это только доступ к базе так же как ADO, и если у тебя TADOQuery и ADO соответственно то ты используеш не ODBC а ADO + "Microsoft OLE DB Provider for ODBC Drivers" + ODBC драйвер + СУБД т.е. целую связку но тебя просят сказать не о том какими компонентами пользуешся а о типе базы (СУБД) еще см. Val © (24.10.02 15:10) хрен знает когда. а еще лутше полностью и подробно.

и вспоминая одну ветку из потрепатся подозреваю что ты просто напросто придуриваешся. в обшем то я стараюсь пока получается отвечать до полного разбора темы (пока ктонибудь удовлетворяющий ответ не даст) но здесь...??? если следующий вопрос в том же духе то извните и до свидания.


 
MsGuns   (2002-10-24 19:42) [16]

>SerjKo (24.10.02 17:36)

Дело действительно не в компонентах. Это все равно, что приехать, скажем в штаты, и пытаться в магазине сунуть гривни, объясняя это тем, что мол тебе такие дают, а ихние доллАры ты и на дух не видишь 8)

Чем не подходит MsGuns © (24.10.02 16:17) или не пробовал ?


 
Delirium   (2002-10-24 19:44) [17]

Видоизменённый пример из LocalSQL.hlp
SELECT SaleDate, ShipDate,
EXTRACT(YEAR FROM saledate)-EXTRACT(YEAR FROM shipdate) AS YY
FROM Orders




 
MsGuns   (2002-10-24 20:06) [18]

>Delirium © (24.10.02 19:44)

Круто ! Если чел был принят 31.12.99, а уволен 2.01.01, то она выдаст стаж 2(!) года. Неверно. Надо или 1 полный или 3 неполных.
Так вроде, в ОК принято.
Или принят 1.01.01, а уволен 31.12.01, получите стаж 0 !
Нет уж, месяц туда-сюда еще ничего, но вот год ! Это ж не археология все-таки 8))


 
SerjKo   (2002-10-25 08:55) [19]

Тип базы данных dBASE.
см. (24.10.02 16:01)


 
SerjKo   (2002-10-25 09:41) [20]

sniknik © (24.10.02 19:29)
Вообще то СУБД - это система управления базами данных, а не тип базы данных.
А в DELPHI управления базами данных на себя берёт или BDE или ODBC исли уже говорить "по понятиям" %-)


 
roottim   (2002-10-25 09:59) [21]

насколько я помню в ОК принято условно считать стаж исходя из :
- 30 дней месяц
- 360 дне год соотв-но

так-что чем ненравится тебе свой запрос?.. подели на 360


 
SerjKo   (2002-10-25 10:09) [22]

roottim (25.10.02 09:59)
Мне вообщем то свой запрос нравиться, но результат получается дробный, а я не знаю как преобразовать его в целый.


 
gek   (2002-10-25 10:33) [23]

Ну поставь в DispleyFormat типа ###
И увидищь числа без дробей


 
SerjKo   (2002-10-25 13:53) [24]

gek © (25.10.02 10:33)

В свойстве какого компонента DisplayFormat надо выставлять?


 
MsGuns   (2002-10-25 14:32) [25]

От дроби легко избавиться в самом запросе с помощью

CAST (<выражение, дающее дробь) as Integer

Св-во DisplayFormat и EditFormat присущи в частности классу TField набора данных

По поводу того, что Дельфи работает ИЛИ с BDE или с ODBC. В корне не верно ! ДЕЛЬФИ вообще не работает с базами данных ! Она вообще ни с чем не работает а просто представляет собою СРЕДУ (транслятор+отладчик+библиотеки+др.) и НАБОР КОМПОНЕНТ. Так вот среди этих самых КОМПОНЕНТ есть такие, которые работают с разным ФОРМАТОМ Баз Данных.
Понятие СУБД - это не просто таблицы или файлы с данными - это прежде всего специализированная СИСТЕМА УПРАВЛЕНИЯ, т.е. набор утилит, обеспечивающих создание и обслуживание баз данных. Например, Paradox, FoxPro, Access и др.
Если же для доступа, например, к Paradox, используется ADO (ODBC), а для ORACLE - BDE, о какой СУБД в данном случае идет речь ? Просто идет ОБРАЩЕНИЕ К БД через инструмент доступа (движки или драйвера)

Сказать, что Дельфи - это СУБД - все равно, что обозвать громадный универсам табачной лавкой (только потому, что там продаются табачные изделия, причем именно продаются, а не изготовляются).


 
SerjKo   (2002-10-25 15:33) [26]

MsGuns © (25.10.02 14:32)
Я и не говорил, что Делфи - это СУБД.
Я имел в виду, что в среде Делфи работой баз данных управляет BDE Administrator или ODBC.
Так разве BDE или ODBC не СУБД?
Помоему это и есть СУБД.


 
Delirium   (2002-10-25 15:50) [27]

> MsGuns ©

"Круто ! Если чел был принят 31.12.99, а уволен 2.01.01, то она выдаст стаж 2(!) года." - Согласен, не подумал. Действительно глупо :)))


 
MsGuns   (2002-10-25 15:53) [28]

>SerjKo (25.10.02 15:33)

Если под BDE понимать не только ядро, но и библиотеки, связанные с ними компоненты, а также набор сервисных утилит (в т.ч. BDE-администратор, DBD и пр.) - то в принципе можно это назвать СУБД, хотя и не позволяющей создавать ПРИЛОЖЕНИЯ для работы со своими БД. Нормальные же современные СУБД имеют такие средства (примеры я уже приводил выше). И уж тем более ODBC не СУБД, т.к. вообще НЕ ИМЕЕТ ЧЕТКО ВЫРАЖЕННОГО СВОЕГО ФОРМАТА, а предназначена для УНИВЕРСАЛЬНОГО ДОСТУПА к любым (почти) БД посредством спец.программ (драйверов)
Но впрочем, обо всем этом можно почитать в документации как к BDE, так и к ODBC, так и к другим (Oracle или IB, например), с которыми дельфя тож работает (и не только с ними)


 
SerjKo   (2002-10-25 16:05) [29]

MsGuns © (25.10.02 15:53)
Я спорить не буду, просто когда меня спрашивают какую СУБД я использую - как мне ответить: если Делфи не СУБД, ODBC и BDE тоже не СУБД, ну а тип базы данных уж не как не СУБД тоже!!!

Кстати я пробовал использовать такие функции как CAST и EXTRACT -увы они не работают так как я использую драйвер Microsoft OLE DB Provider for ODBC Drivers.
А вот с поддержкой BDE эти функции работают.
Я так понял что мне нужно пользоваться функциями для MS SQl, а не Local SQL.


 
MsGuns   (2002-10-25 16:42) [30]

>SerjKo (25.10.02 16:05)
На вопрос о типе используемой СУБД надо отвечать про ФОРМАТ БД
и механизм доступа к нему. Например, в данном случае: DBASE и MsSQL-стандарт SQL через Ole/ODBC. Специалист поймет сразу. А если не специалист, то можно сказать ему любую абракадабру - он один фиг ниче не разберет.

>Кстати я пробовал использовать такие функции как CAST и EXTRACT -увы они не работают

Это возможности языка Local SQL, понимаемый компонентами BDE, и ею же (BDE) компиллирующего его в запрос сервера-адресата. По идее его синтаксис должен быть понятен большинству популярных стандартов SQL. Ошибка может возникать, напрмер, из-за простой опечатке при наборе оператора или неправильном синтаксисе. Для его проверки надо запустить его из SQL-Explorer и если уж там ошибок не будет и все вернется Ok, а в проге будет по-прежнему глючить с ODBC, тогда уж надо читать доку по SQL-92 (2000) и переделать запрос в соответствии с особенностями его синтаксиса.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.008 c
3-45765
SWD
2002-10-25 14:33
2002.11.14
Кнопки в DBGrid


3-45690
boa
2002-10-28 09:23
2002.11.14
Краткий справочник по MS SQL


6-46027
AndreyS
2002-09-17 14:24
2002.11.14
Определение активности удаленной машины по локалке?


3-45763
Евген
2002-10-25 12:06
2002.11.14
Возможность ввода в DBLookupComboBox


8-45998
BOA_KAA
2002-07-25 16:26
2002.11.14
Выделение части рисунка в TImage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский