![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ПОмогите составить SQL запрос [D7, Paradox]
AntonUSAnoV © (2008-01-08 18:08:00)Такая проблема:
Есть БД по спортивным мероприятиям, в таблице отображаются соревнования, сроки проведения, для сроков в таблице Базы данных определены след. поля: число, месяц, год.
Нужно составить SQL запрос к БД типа: пользователь указывает диапазон времени формата с (число),(месяц) по (число)(месяц), и программа выдаёт все мероприятия, проходящие в эти сроки.
Изначально написал такой вот код, :
if c1 = '%' then
query1.SQL[3]:='(chislo >= "'+c1+'" or chislo is null) and' else
query1.SQL[3]:='(chislo >= "'+c1+'") and';
if m1 = '%' then
query1.SQL[4]:='(month1 like "'+m1+'" or month1 is null) and' else
query1.SQL[4]:='(month1 like "'+m1+'") and';
if c2 = '%' then
query1.SQL[5]:='(chislo2 <= "'+c2+'" or chislo2 is null) and' else
query1.SQL[5]:='(chislo2 <= "'+c2+'") and';
if m2 = '%' then
query1.SQL[6]:='(month2 like "'+m2+'" or month2 is null) and' else
query1.SQL[6]:='(month2 like "'+m2+'") and';
if vyear = '%' then
query1.SQL[7]:='(year1 like "'+vyear+'" or year1 is null) and' else
query1.SQL[7]:='(year1 like "'+vyear+'") and';
но он логически неверный, очень прошу помочь..
Юрий Зотов (2008-01-09 20:01:00) [1]> AntonUSAnoV (08.01.08 20:21) [5]
> а формат даты если не ошибаюсь дд.мм.гггг,
Это не формат даты, это формат ее строкового представления. И он может быть ЛЮБЫМ, каким Вы только захотите. А в таблице должно быть не 3 целых поля (день, месяц, год), а одно поле типа TDateTime (сразу вся дата). Тогда весь ваш запрос сразу станет очень простым (...where DATE between...) и гарантированно правильным (то есть, с автоматическим учетом високосных лет, разного количества дней в месяцах и всего остального).
> Malik (09.01.08 18:48) [9]
Если правильно, то надо прочитать про тип TDateTime и понять, что в нем нет ни месяцев, ни годов. И что его строковое представлениеможно сделать ЛЮБЫМ. Хоть мм.дд.гггг, хоть как угодно иначе.
Malik (2008-01-09 18:48:00) [2]
> Читай про тип TDateTime и про его строковое представление.
Сори если правильно то так сделать: мм.дд.гггг???
Ega23 (2008-01-09 18:30:00) [3]
> а формат даты если не ошибаюсь дд.мм.гггг,
Ошибаешься.
Читай про тип TDateTime и про его строковое представление.
AntonUSAnoV (2008-01-09 18:24:00) [4]
> Malik
Такого не бывает, нет год для обоих концов сроков не нужен.
Malik (2008-01-08 20:25:00) [5]
> AntonUSAnoV (08.01.08 20:21) [5]
А что ты будеш делать с мероприятием который идет на стыке годов скажем 20 ноб 2007 по 20 фев 2008?
AntonUSAnoV (2008-01-08 20:21:00) [6]
> Malik
Ну мероприятие длится с 10 мая по 20 мая , а формат даты если не ошибаюсь дд.мм.гггг, т.е. мне для правильной записи числа нужно будет записывать в формате с 10 мая 2007 по 20 мая 2007.
AntonUSAnoV (2008-01-08 20:18:00) [7]
> Правильный_Вася
с 10 февраля по 20 мая !
Malik (2008-01-08 19:20:00) [8]А не судьба число, месяц, год в один тип сделать — Date сделать?
Правильный_Вася (2008-01-08 19:17:00) [9]с 10 по 20 всех месяцев с февраля по май?
или с 10 февраля по 20 мая?
AntonUSAnoV (2008-01-08 18:10:00) [10]c1 -с какого числа производится поиск,
c2 - по какое число
m1 - с какого месяца
m2 - по какой месяц