Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.28;
Скачать: CL | DM;

Вниз

PLSQL   Найти похожие ветки 

 
Прохоренко   (2008-08-04 14:17) [0]

Помогите построить запрос, мне нужно вытащить данные за 03 месяц и 2009 год из таблицы, где тип поля дата. Есть ли стандартные функции для этого или нужно путем вырезания Substr ?


 
Ega23 ©   (2008-08-04 14:18) [1]

3 месяц 2009 ещё не наступил.
Если чё.


 
Юрий Зотов ©   (2008-08-04 14:19) [2]

between?


 
alex-drob ©   (2008-08-04 14:21) [3]

Удалено модератором


 
Sergey13 ©   (2008-08-04 14:34) [4]

> [0] Прохоренко   (04.08.08 14:17)

А зачем тут PLSQL, тут и SQL за глаза хватит.
см Юрий Зотов ©   (04.08.08 14:19)

select * from table_name
where date_filed :between date_begin and :date_end


 
Ламо777   (2008-08-04 18:02) [5]

>Прохоренко

select * from mytable where to_date(myfield, "YYYY") = 2009
and to_date(myfield, "MM") = 03


ИМХО, конечно. Может есть способы и поэлегантнее


 
Medbe}I{onok XML ©   (2008-08-04 18:23) [6]

превед индексам


 
Ламо777   (2008-08-04 18:46) [7]


> Medbe}I{onok XML

Почему?


 
Petr V. Abramov ©   (2008-08-04 19:18) [8]


> Medbe}I{onok XML ©   (04.08.08 18:23) [6]

с чего?


> Прохоренко   (04.08.08 14:17)  
> данные за 03 месяц и 2009 год из таблицы, где тип поля дата.
>  Есть ли стандартные функции для этого или нужно путем вырезания
> Substr ?

есть, так и называется extract


 
sniknik ©   (2008-08-04 19:45) [9]

> Почему?
> с чего?
сравнение с вычисляемым значением, индексы не используются.


 
Petr V. Abramov ©   (2008-08-04 19:56) [10]


> sniknik ©   (04.08.08 19:45) [9]

подумаешь из даты год выдернули, вполне range scan пройти может.
счас под рукой оракла нет, проверю, отпишусь


 
Ламо777   (2008-08-04 19:58) [11]


> sniknik ©


Если дата хранится в одном поле (как можно догадаться из вопроса),
то "вытащенное" значение года, месяца и т.п. всегда является
вычисляемым, ИМХО. Т.е. как ни крути, получается что индексы
идут лесом.

Другое дело, если бы день, месяц и год хранились в разных полях...


 
sniknik ©   (2008-08-04 20:08) [12]

> Если дата хранится в одном поле (как можно догадаться из вопроса),
> значение года, месяца и т.п. всегда является вычисляемым
вот тут впору в обратную сторону воскликнуть - с чего бы это? нельзя чтоли период в условии задать? (см [2] или аналогичное)
учите sql, не изобретайте велосипеды...

> Если дата хранится в одном поле (как можно догадаться из вопроса),
да, тогда это другое дело, тогда это процветание махрового ламеризма...


 
sniknik ©   (2008-08-04 20:12) [13]

> счас под рукой оракла нет, проверю, отпишусь
смотри только не спутай при проверке, что именно будет работать, твой запрос или результат работы оптимизатора. он в оракле вроде сильный.


 
Игорь Шевченко ©   (2008-08-05 00:08) [14]


> Помогите построить запрос, мне нужно вытащить данные за
> 03 месяц и 2009 год из таблицы, где тип поля дата. Есть
> ли стандартные функции для этого или нужно путем вырезания
> Substr ?


У тебя китайская версия Оракл ?


 
Petr V. Abramov ©   (2008-08-05 00:39) [15]


> sniknik ©   (04.08.08 20:12) [13]

не, даже с хинтом не канает.
есть что сделать в следующих версиях
:)


 
Прохоренко   (2008-08-05 08:07) [16]


> select * from mytable where to_date(myfield, "YYYY") = 2009
> and to_date(myfield, "MM") = 03


Самое то, спасибо ...


> between?


И ? BETWEEN определяет диапазон, к делу никакого отношения.


 
Прохоренко   (2008-08-05 08:08) [17]


> А зачем тут PLSQL, тут и SQL за глаза хватит.


Что бы вопросов небыло, какая БД ...  На всякий пожарный.


 
MsGuns ©   (2008-08-05 08:23) [18]

>BETWEEN определяет диапазон, к делу никакого отношения.

Про индексы перепалку не читали ?
Бисер потрачен впустую ;(


 
Ламо777   (2008-08-05 08:59) [19]


> И ? BETWEEN определяет диапазон, к делу никакого отношения.


Тогда (если юзаете PL SQL) нужно сделать запрос between первое и последнее число месяца.
Первое число - оно всегда 01, последнее число месяца в Оракле
получите из last_day.

А вообще, лучше сравните быстродействие этих вариантов сами...


 
Ламот ©   (2008-08-05 13:22) [20]

<Оfftop>
С SQL знаком поверхностно, подобные вопросы решал объединением сравнений:
(date_x > "2009-01-01" and date_x < "2009-04-01")
на сколько это хуже, нежели использование between?
</Оftop>


 
Medbe}I{onok XML ©   (2008-08-05 13:28) [21]

бетвин делает то же самое. просто языковая конструкция для удобства.


 
Anatoly Podgoretsky ©   (2008-08-05 13:43) [22]

Вообще то нет, совсем не так.


 
Medbe}I{onok XML ©   (2008-08-05 14:26) [23]

а как?


 
Ламо777   (2008-08-05 14:49) [24]

Проверил оба варианта.
На моей БД конструкция с between выполняется примерно в 4-5 раз
быстрее, чем мои извраты с to_date :-)))
А cost обоих запросов практически одинаковый.


 
Sergey13 ©   (2008-08-05 14:56) [25]

> [24] Ламо777   (05.08.08 14:49)
> А cost обоих запросов практически одинаковый.

А в попугаях будет длиннее. 8-)
План надо сравнивать.


 
Ламо777   (2008-08-05 15:01) [26]


> Sergey13 ©   (05.08.08 14:56) [25]


Чтоб сравнивать план, нужно иметь понимать что
означают все эти "table full scan" и т.д..
Я за собой этого не наблюдаю ))), поэтому стараюсь
уменьшить цену запроса.


 
Ламо777   (2008-08-05 15:02) [27]

иметь понимать >> иметь понимание


 
Sergey13 ©   (2008-08-05 15:08) [28]

> [26] Ламо777   (05.08.08 15:01)

Ну хотя бы переведи каким-нибудь промптом эти самые "table full scan". Уже многое прояснится.


 
Medbe}I{onok XML ©   (2008-08-05 16:07) [29]

быстрее, чем мои извраты с to_date :-)))

не вижу связи между битвином и to_date



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

Текущий архив: 2008.09.28;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.026 c
15-1217996546
Ламо777
2008-08-06 08:22
2008.09.28
Программа для учета трафика


15-1217828621
начинающий
2008-08-04 09:43
2008.09.28
PS/2 мышь и клавиатура выделываются


8-1186323330
bagos
2007-08-05 18:15
2008.09.28
Online music editor


15-1217973694
Tricky
2008-08-06 02:01
2008.09.28
Delphi 7 и XP x64


2-1218633633
webpauk
2008-08-13 17:20
2008.09.28
Отображение компонентов на форме