Страница 1 из 1

Примитивный SQL запрос С (Дата время) по (Дата Время)

Добавлено: 28 мар 2009, 16:58
Sasha8111
Дорогие специалисты!

Как сформировать запрос «Вывести информацию из таблицы с (Дата Время) по (Дата Время)».

Есть таблица TBL, в которой кроме кучи полей есть поле Data (в формате Y.M.D) и поле Time в формате (H:M:S).

Какой SQL запрос должен быть, что бы выводить информацию,
например, с дата=‘2008.11.01’ время=‘10:12:11’ по дата=‘2009.10.12’ время=‘23:12:11’.


Спасибо!

P.S
Простите за детский сад

Re: Выборка по дате

Добавлено: 28 мар 2009, 19:14
AiK
[syntax=sql]
select
*
from
yourtable
where
datacolumn between "2008.11.01" and "2009.10.12"
and timecolumn between "10:12:11" and "23:12:11" [/syntax]

Re: Примитивный SQL запрос С (Дата время) по (Дата Время)

Добавлено: 02 апр 2009, 09:40
BBB
Sasha8111 писал(а):Есть таблица TBL, в которой кроме кучи полей есть поле Data (в формате Y.M.D) и поле Time в формате (H:M:S).
Sasha8111 писал(а):с дата=‘2008.11.01’ время=‘10:12:11’ по дата=‘2009.10.12’ время=‘23:12:11’.
Странно, что дата и время хранятся в разных полях. Если нужно сохранять момент "времени на оси времени", то понятно, что это должно быть единое комбинированное поле. Так как в противном случае поле "время" без поля "дата" все равно не имеет никакого смысла.
На практике, конечно, можно придумать такую задачу, где поле "время" само по себе может иметь смысл. Но, разумеется, отличный от фиксировании "некоторого момента на оси времени". Например, при описании некоторых ежедневных событий. Скажем, время открытия и закрытия магазина.

В связи с этим фраза "с дата=‘2008.11.01’ время=‘10:12:11’ по дата=‘2009.10.12’ время=‘23:12:11’." может иметь двоякий смысл. Если надо найти все, что между этими двумя точками, то вариант AiK, конечно, не подходит. Т.к, не найдет, например, дата=‘2008.12.01’ время=‘09:00:00’. Тут надо писать примерно следующее:

Код: Выделить всё

SELECT * FROM
        yourtable WHERE
        (datacolumn BETWEEN "2008.11.02"  AND  "2009.10.11") OR
        (datacolumn = "2008.11.01" AND  timecolumn >= "10:12:11") OR
        (datacolumn = "2009.10.12" AND  timecolumn <= "23:12:11")
А вариант AiK описывает ситуацию: найти события, произошедшие в указанном диапазоне дат, в каждый из дней в указанном интервале времени.

Re: Примитивный SQL запрос С (Дата время) по (Дата Время)

Добавлено: 02 апр 2009, 11:42
alexander.spb
AiK абсолютно прав.
---
Пардон
Да, это не верно))
---
Можно конкатенировать дату и время, и сравнивать как строки символов.
Еще можно сделать View, в котором колонки дата и время слиты в одну,
и работать с этим view

Re: Примитивный SQL запрос С (Дата время) по (Дата Время)

Добавлено: 03 апр 2009, 11:13
Laba
BBB писал(а):Странно, что дата и время хранятся в разных полях. Если нужно сохранять момент "времени на оси времени", то понятно, что это должно быть единое комбинированное поле. Так как в противном случае поле "время" без поля "дата" все равно не имеет никакого смысла.
На практике, конечно, можно придумать такую задачу, где поле "время" само по себе может иметь смысл. Но, разумеется, отличный от фиксировании "некоторого момента на оси времени". Например, при описании некоторых ежедневных событий. Скажем, время открытия и закрытия магазина.
Странного в раздельном хранении даты и времени нет. Много средств разработки имеют отдельные типы данных для даты и для времени. На это есть очень много достойных причин. Ты и сам об одной пишешь - не всем надо знать точную дату события.

Ошибкой считать, что время без даты мало кому нужно. Очень и очень даже нужно.

Банальный пример, открутка баннеров на этом сайте. :) Ночные часы - баннеры, в дневное ппц реклама. И таких сайтов - целый интернет, и у каждого есть своя статистика посещений и подсчета доходов и т.д. и т.п. :D
--------------------------------------------------------------------------------
Добавленное сообщение
--------------------------------------------------------------------------------
Sasha8111 писал(а):Дорогие специалисты!

Как сформировать запрос «Вывести информацию из таблицы с (Дата Время) по (Дата Время)».

...

Какой SQL запрос должен быть, что бы выводить информацию,
например, с дата=‘2008.11.01’ время=‘10:12:11’ по дата=‘2009.10.12’ время=‘23:12:11’.
Будь проще! Время тебя скоре всего вообще не должно беспокоить. Если у тебя "дата", то это дата! Времени у него как бы и нет. :D Теоретически это 00:00

Тогда так и без between!

select * from x where '01.11.2008' < дата and дата <= '12.10.2009'

Конечно, если в твоём аргументе "дата" есть время, то... легче его оттуда вычленить и затем писать sql

Конкатенация полей даты + время не есть хорошо.