Форум: "Базы";
Текущий архив: 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