Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 07.04.2022
Сообщений: 12

Запрос oracle на разницу дат с условием

14.05.2022, 17:07. Показов 893. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не могу разобраться с запросом oracle 8 в delphi 7 в базе paradox на BDEQuery , долго искал в интернете, безрезультатно. Стоит задача, найти все записи, где разница между двумя датами одной строки в днях больше или равна 10.

Добавлено через 11 минут
Больше или равна 10 дней.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2022, 17:07
Ответы с готовыми решениями:

найти разницу дат кроме определенного формата, найти разницу дат
Здравствуйте! У меня есть две колонки с датами, мне нужно найти разницу во времени у этих дат ,КРОМЕ тех, у которых вид 01.01.2000, в...

Когда пытась расчитать формулой разницу двух дат (формат дат) то получаю !ЗНАЧ сообщение об ошибке
hi all! Почему -то в excel когда пытась расчитать формулой разницу двух дат (формат дат) то получаю !ЗНАЧ сообщение об ошибке....

Вернуть разницу дат
подскажите пожалуйста. есть таблица, как вернуть : DECLARE @T TABLE (D_Date DATE) INSERT INTO @T VALUES ('14.12.2014'), ...

6
0 / 0 / 0
Регистрация: 07.04.2022
Сообщений: 12
15.05.2022, 07:59  [ТС]
Сумел сообразить такой запрос:
Delphi
1
2
3
4
5
6
7
8
9
10
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Add('Select * from Test18');
Query1.SQL.Add('Where (R08_1 = '''+inttostr(1050)+''' or (R08_1 = '''+inttostr(1110)+''' and R08_2 = '''+inttostr(4)+''') or  (R08_1 = '''+inttostr(1310)+''' and R08_2 = '''+inttostr(4)+''') or (R08_1 = '''+inttostr(1320)+''' and R08_2 = '''+inttostr(4)+'''))');
Query1.SQL.Add('and R06_1 = '''+inttostr(100)+'''');
Query1.SQL.Add('and (R27_1 between '''+Date22+''' and '''+Date33+''')');
Query1.SQL.Add('and (R05_2 > R07_1_2 - 10)');
Query1.Active:=true;
n:=Query1.RecordCount;
XlApp.Range['J11']:=n;
Он почему-то работает неправильно если взять отдельно
Code
1
Query1.SQL.Add('and (R05_2 > R07_1_2 - 10)');
оно работает правильно, если брать вместе, то ищет с ошибками. Не могу разобраться что не так в запросе.
Числа в строку конвертирую, потому что в бд эти реквизиты почему-то имеют текстовый тип.
0
941 / 118 / 28
Регистрация: 28.11.2018
Сообщений: 302
16.05.2022, 12:11
Цитата Сообщение от BlasterBomber Посмотреть сообщение
Не могу разобраться что не так в запросе.
Тут вообще всё не так. Вы каким-то образом собираете SQL запрос из строковых кусков, потом отправляете в БД, где эти строковые куски как-то парсятся, а потом БД пытается (как может) понять, где у вас строка, где дата, где число.
Ваши переменные Date22 и Date33 какой тип имеют? Какой тип имеет поле R27_1 в таблице? Запросто может оказаться, что у вас настройки дат на клиенте и в БД окажуются разными, при склейке строки
Delphi
1
Query1.SQL.Add('and (R27_1 between '''+Date22+''' and '''+Date33+''')');
будет использован один формат даты, а потом при парсинге в БД - другой. И та же ерунда с числами, если у вас R05_2 и R07_1_2 - строки в БД. Результат может быть какой угодно вообще, вплоть до того, что при с одним планом запроса будет работать правильно, с другим - неправильно, а с третьим - выкидывать исключение.

Самое оптимальное - привести таблицу в нормальный вид (сделать числа - числами и даты - датами), если невозможно - использовать явное приведение типов с помощью функций to_number и to_date. На клиенте - использовать параметры:

Delphi
1
2
3
Query1.SQL.Add('Select * from Test18 where R27_1 between :p1 and :p2');
Query1.params[0].AsDate := date22;
Query1.params[1].AsDate := date33;
0
0 / 0 / 0
Регистрация: 07.04.2022
Сообщений: 12
16.05.2022, 20:48  [ТС]
Цитата Сообщение от zzzxxxccc Посмотреть сообщение
где у вас строка, где дата, где число
Моя вина, не обозначил в посте типы.
R08_1, R08_2,R06_1 - текстовый
R27_1,R05_2 ,R07_1_2-дата.
Это все проверено, все типы совпадают. То, что я перевожу числа в строки - это обусловлено особенность бд для которой это пишется, изменять себе дороже. До меня было сделано так: все числовые поля имею текстовый тип, поэтому приходится изворачиваться.
Подскажите, как оптимальнее в bde делать сложные sql запросы (кроме как сжечь парадокс и сделать все на нормальной субд))).
0
18.05.2022, 11:11

Не по теме:

меня одного в полный тупик поставили слова Oracle и Paradox в одном предложении?

0
408 / 242 / 88
Регистрация: 28.04.2022
Сообщений: 1,207
18.05.2022, 19:35
...
0
941 / 118 / 28
Регистрация: 28.11.2018
Сообщений: 302
19.05.2022, 18:23
Цитата Сообщение от BlasterBomber Посмотреть сообщение
Подскажите, как оптимальнее в bde делать сложные sql запросы (кроме как сжечь парадокс и сделать все на нормальной субд))).
Я думал у вас Oracle, заголовок сбил с толку.
Ничего не знаю про парадокс, но по-прежнему рекомендую использовать параметры и сам запрос по возможности не собирать по мелким кусочкам, а написать где-то в одном месте целиком. И для верности запускать запрос напрямую (если в парадоксе есть такая возможность) и сравнивать с тем, что получается из delphi.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2022, 18:23
Помогаю со студенческими работами здесь

Как посчитать разницу дат
Здравствуйте как посчитать разницу между двумя введенными датами и так что бы это отображалось в другом поле( п.с. куда надо поставить...

Вычислить разницу дат в днях
есть две даты в таком формате 2012-12-20 2012-11-01 как найти их разницу в днях?

Подсчитать разницу дат в днях
Доброго времени суток! Допустим есть датагрид с двумя столбцами по одному столбцу идут первые даты по второму столбцу идут вторые даты ...

Определить разницу двух дат в днях
Ребятишки,помогите,не могу разобраться. вообщем вот задание: Посетитель вводит дату праздника, в результате выводится сообщение о том,...

Как получить разницу в миллисекундах из 2х дат?
Вот такой метод написал из примеров в сети private float GetTimeDiff(string stringDate){ DateTime TimeNow =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru