![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос [D5, WinME]
Nata © (2004-12-22 18:21:00)Доброго времени суток. Помогите составить запрос . Надо из таблицы J51 ( поля таблицы : dat(дата) и name (наименования)) выбрать все записи за какой-либо месяц ( к примеру за январь 2004 или октябрь2004).
Skyle (2004-12-22 19:12:00) [21]> Соловьев © (22.12.04 19:10) [11]
SELECT Dat, Name
FROM J51
WHERE Dat >= '20040101' AND Dat < '20040201'
P.S. MS SQL.
sniknik (2004-12-22 19:11:00) [22]> В диалекте MS SQL я написал бы
> ...
зря, если есть по полю индекс то он будет бесполезен.
> а я бы datepart() :)
аналогично
> Спорный вопрос. Так на клиенте замучаешься конечную дату подбирать.
select * from J51 where dat between :d_begin and :d_end
d_begin:= StartOfTheMonth()
d_end:= EndOfTheMonth()
> А с учётом того, что у datetime из MS SQL и у TDateTime из Borland разные нулевые значения...
ну и что? а ты проверь, вот так с параметрами... (пропускает день? лишний захватывает?)
> В общем, предпочитаю такую работу на SQL делать, а не на клиенте.
а вот это уже аргумент. на вкус на цвет...
Соловьев (2004-12-22 19:10:00) [23]2 Skyle
интересно, а как бы Вы написали запрос который возвратит
"... выбрать все записи за какой-либо месяц ( к примеру за январь 2004 или октябрь2004)..." ?
Skyle (2004-12-22 19:06:00) [24]
> Так на клиенте замучаешься конечную дату подбирать.
Не стоит решать административные проблемы программно.
Если есть правило, которое гласит, что "конечной датой считается дата после окончания периода", то никаких особых проблем не предвидится.
> что у datetime из MS SQL и у TDateTime из Borland разные
> нулевые значения
При чём тут апельсины?
> предпочитаю такую работу на SQL делать
А чем они связаны, эти "работы"?
Ega23 (2004-12-22 18:58:00) [25]А я бы не выкаблучивался, вызывая не очень нужные функции и снижая удобочитаемость ;-))))))
Спорный вопрос. Так на клиенте замучаешься конечную дату подбирать.
А с учётом того, что у datetime из MS SQL и у TDateTime из Borland разные нулевые значения...
В общем, предпочитаю такую работу на SQL делать, а не на клиенте.
Skyle (2004-12-22 18:52:00) [26]> Ega23 ©
> Соловьев ©
А я бы не выкаблучивался, вызывая не очень нужные функции и снижая удобочитаемость ;-))))))
Хотя монастырь опять же...
Ega23 (2004-12-22 18:45:00) [27]а я бы datepart() :)
Year(), Month() и Day() - частные случаи datepart :о)
Соловьев (2004-12-22 18:44:00) [28]2 Ega23 © (22.12.04 18:42) [4]
а я бы datepart() :)
Соловьев (2004-12-22 18:42:00) [29]select *
from j51
where extract(month from dat) = 1
Ega23 (2004-12-22 18:42:00) [30]2 Sergey13 © (22.12.04 18:37) [2]
Была какая-то фича с between и датами. Типа, не выбирались граничные значения.
В диалекте MS SQL я написал бы
Select * from J51 where Year(dat)=2004 and Month(dat)=1
Skyle (2004-12-22 18:40:00) [31]
> Sergey13 © (22.12.04 18:37) [2]
Я бы предложил
...where dat >= Начало_месяца and Dat < Начало_следующего
Если дополнительно указано время, то могут быть казусы.
Sergey13 (2004-12-22 18:37:00) [32]select * from J51 where dat between :d_begin and :d_end
:d_begin и :d_end параметры начала и конца периода типа дата.
Ega23 (2004-12-22 18:35:00) [33]СУБД какая?