Форум: "Прочее";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.054 c