Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1219018734
Lamer666
2008-08-18 04:18
2008.09.28
Bз одного ADODataSet в Другой?


2-1218999520
Lamer666
2008-08-17 22:58
2008.09.28
MD5


15-1217861420
{RASkov}
2008-08-04 18:50
2008.09.28
Альфа-канал


8-1186690843
Spok
2007-08-10 00:20
2008.09.28
как зациклить MediaPlayer?


15-1218177214
axis_of_evil
2008-08-08 10:33
2008.09.28
резервная копия данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский