Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.013 c
15-1218105060
Пробежал...
2008-08-07 14:31
2008.09.28
Нет отличия INADDR_NONE от INADDR_BROADCAST ;(


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


2-1218819917
matveih1
2008-08-15 21:05
2008.09.28
Как получить объект присвоенный узлу дерева?


15-1217791156
Дмитрий_С
2008-08-03 23:19
2008.09.28
Посоветуйте видеоконвертер


2-1219068801
dmitry_12_08_74
2008-08-18 18:13
2008.09.28
Помогите:не меняется свойство FileName в открытом диалоговом окне




   Наверх