Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с датами в Firebird, с частями даты 
V
    Опции темы
SlipKnot
Дата 22.10.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Есть таблица. В ней есть данные клиентов. Есть поле с датой рождения типа Date.
Как написать запрос чтоб по заданой дате(День/Месяц) можно было вывести клиентов.

Код

SELECT *
FROM CLIENT
WHERE CLIENT."Birth"=:Birth1

такой запрос не подходит т.к тип Date имеет формат дд.мм.гггг и по этому будет выводить все х пользователей по Дню/Месяцу и ГОДУ!!

Это сообщение отредактировал(а) Akella - 22.10.2008, 21:48
PM   Вверх
Akella
Дата 22.10.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



SlipKnot, пользуйся тегами код, цитата.
Можно выделить текст и нажать кнопку цитата, если это код, то нажать кнопку код. Рядом с кнопкой код (справа) есть маленький треугольничек для выбора типа подсветки.

Добавлено через 31 секунду
Код

SELECT *
FROM CLIENT
WHERE CLIENT."Birth"=:Birth1


так ведь сообщение более читабельно smile

Добавлено через 3 минуты и 39 секунд
используй оператор between
Код

SELECT *
FROM CLIENT
WHERE CLIENT."Birth" between '25.08.2009' and '25.10.2009'


или как тебе надо?

Добавлено через 7 минут и 55 секунд
Работа с датами в Firibird sql


вот прекрасные примеры
http://www.sql.ru/faq/faq_topic.aspx?fid=477


http://forum.sources.ru/index.php?showtopic=131413

Код


SELECT *
FROM CLIENT
WHERE CLIENT."Birth" like '%.08.2009'

PM MAIL   Вверх
SlipKnot
Дата 22.10.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Цитата(Akella @  22.10.2008,  18:36 Найти цитируемый пост)
или как тебе надо?

нет, ты не понял. 
если я введу 
Код

SELECT *
FROM CLIENT
WHERE CLIENT."Birth" between '25.08.2009' and '25.10.2009'

то мне выведет всех клиентов с датой рождения от '25.08.2009' and '25.10.2009'
А мне нужно что я ввел только число и месяц и чтоб все клиенты с такой датой рождения выдало не учитывая год рождения
PM   Вверх
Бонифаций
Дата 22.10.2008, 19:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: нет
Всего: 40



Код

SELECT * FROM CLIENT WHERE EXTRACT(MONTH FROM Birth) = 8 and EXTRACT(DAY FROM Birth) = 16




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Akella
Дата 22.10.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



У меня сработал такой запрос:
Код

select id from apart where cast(input_date as VARCHAR(30)) like '%2008-10%'


нужно глянуть, как жарптица показывает записи (вот таким запросом):
Код

select cast(input_date as VARCHAR(30)) as d1 from apart

результат:
Код

2008-10-08 09:16:40.5380
2008-10-15 23:21:54.1150
2008-10-15 23:22:08.5060
2008-10-15 23:23:45.4740
2008-10-15 23:23:56.2560


Добавлено через 5 минут и 25 секунд
SlipKnot, и ещё важное замечание: название темы должно отражать её суть, а по сему прошу тебя отредактировать название темы, если не сообразишь, как то напиши: Работа с датами в Firebird, а в описании можно написать с частями даты

Добавлено через 6 минут и 58 секунд
Цитата(SlipKnot @  22.10.2008,  18:59 Найти цитируемый пост)
то мне выведет всех клиентов с датой рождения от '25.08.2009' and '25.10.2009'

а тебе нужно вывести тех клиентов, которые родились в августе или в сентябре, да?
PM MAIL   Вверх
SlipKnot
Дата 22.10.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Цитата(Akella @  22.10.2008,  19:06 Найти цитируемый пост)
а тебе нужно вывести тех клиентов, которые родились в августе или в сентябре, да? 

Код

select id 
from apart 
where cast(input_date as VARCHAR(30)) like '%2008-10%'

этот запрос мне полностью подходит

Добавлено через 4 минуты и 27 секунд
Цитата(Akella @  22.10.2008,  19:06 Найти цитируемый пост)
SlipKnot, и ещё важное замечание: название темы должно отражать её суть, а по сему прошу тебя отредактировать название темы, если не сообразишь, как то напиши: Работа с датами в Firebird, а в описании можно написать с частями даты

прости не могу найти где редактировать тему
PM   Вверх
Akella
Дата 22.10.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



я понимаю, что полностью, но код Бонифация может меньше нагружать сервер, я тебе рекомендую нагенерить миллион записей и сделать тест.

Добавлено через 48 секунд
Цитата(SlipKnot @  22.10.2008,  19:18 Найти цитируемый пост)
прости не могу найти где редактировать тему 

в своём первом сообщении справа вверху есть кнопка редактировать
PM MAIL   Вверх
SlipKnot
Дата 22.10.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Цитата(Akella @  22.10.2008,  19:26 Найти цитируемый пост)
в своём первом сообщении справа вверху есть кнопка редактировать

извени, но я могу там редактировать только сообщение. но никак не название темы.

Добавлено через 4 минуты и 48 секунд
Цитата(Бонифаций @  22.10.2008,  19:03 Найти цитируемый пост)
SELECT * FROM CLIENT WHERE EXTRACT(MONTH FROM Birth) = 8 and EXTRACT(DAY FROM Birth) = 16


Цитата(Akella @  22.10.2008,  19:06 Найти цитируемый пост)
    
select id from apart where cast(input_date as VARCHAR(30)) like '%2008-10%'


спасибо!!!
PM   Вверх
Akella
Дата 22.10.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(SlipKnot @  22.10.2008,  19:30 Найти цитируемый пост)
извени, но я могу там редактировать только сообщение. но никак не название темы.

хм... а если щёлкнуть сейчас по названию темы (лева вверху)?

Добавлено @ 19:41
попробуй тек же индексировать поле с датой и посмотри на план запроса, будет ли использоваться индекс? Если да, то в каком случае?

Это сообщение отредактировал(а) Akella - 22.10.2008, 19:41
PM MAIL   Вверх
SlipKnot
Дата 22.10.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Цитата(Akella @  22.10.2008,  19:40 Найти цитируемый пост)
хм... а если щёлкнуть сейчас по названию темы (лева вверху)?

название темы для меня щас не активно. возможно это из-за того что вы тут установили лимит сообщений перед тем как что-то менять

PM   Вверх
Бонифаций
Дата 22.10.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: нет
Всего: 40



Ну в случае extract скорее всего индекс использоваться не будет.. И когда like '%ляляля%' видимо тоже.. Так что наверное будет full scan везде. 


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
SlipKnot
Дата 24.10.2008, 02:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Еще один вопрос по той же теме.
Мне нужно вывести тех же клиентов только не по заданной дате, а в интервале от .. до но только так же как и в прошлый рас только по дню и месяцу.
Код

SELECT *
FROM CLIENT
WHERE (EXTRACT(MONTH FROM Client."Birth") >= :Par1 and EXTRACT(DAY FROM client."Birth") >= :Par2)
and (extract(MONTH FROM Client."Birth") <= :Par3 and EXTRACT(DAY FROM client."Birth") <= :Par4)

вот что я пишу. Этот запрос только частично работает.
PM   Вверх
Akella
Дата 24.10.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(SlipKnot @  24.10.2008,  02:11 Найти цитируемый пост)
частично работает. 

это как?

Добавлено через 56 секунд
Извини, с меня хватит, мне просто надоело отвечать на такие вопросы. Жди, может какой-нибудь телепат появится и угадает твоё частично.
PM MAIL   Вверх
vladimir74
Дата 24.10.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата

Вторая свежесть - вот что вздор! Свежесть бывает только одна - первая, она же и последняя. А если осетрина второй свежести, то это означает, что она тухлая!
Булгаков "Мастер и Маргарита"

перефразировав - запрос не может работать частично....
а вместо AND тебе нужен 
Код

WHERE BETWEEN (EXTRACT(MONTH FROM Client."Birth") >= :Par1 and EXTRACT(DAY FROM client."Birth") >= :Par2)
AND  (extract(MONTH FROM Client."Birth") <= :Par3 and EXTRACT(DAY FROM client."Birth") <= :Par4)

--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
SlipKnot
Дата 24.10.2008, 23:05 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



vladimir74, Этот код не пашет. Ругается на Between

Это сообщение отредактировал(а) SlipKnot - 24.10.2008, 23:26
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.