Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Вниз

Господа, помогите с выборкой, надо выбрать людей, у кого день   Найти похожие ветки 

 
Layner   (2004-01-08 11:47) [0]

рождения например с 8 января по 14 января, вот мой запрос, но он "считает" не то что мне надо, то "прокатывает", то показывает не верно.
people.d_sv - это столбец с датой.

SELECT people.rowid, people.name, people.d_sv
FROM people
WHERE month(people.d_sv)*100+day(people.d_sv)>=month(#01/08/2004#)*100+day(#01/08/2004#)
AND month(people.d_sv)*100+day(people.d_sv)<=month(#01/14/2004#)*100+day(#01/14/2004#)


 
DCoder   (2004-01-08 11:59) [1]

SELECT people.rowid, people.name, people.d_sv
FROM people
where (people.d_sv>="01.08.2004") and (people.d_sv<="01.08.2004")

или используй between

where people.d_sv between "01.08.2004" and "01.08.2004"


 
DCoder   (2004-01-08 12:00) [2]

ошибка: даты одинаковые, ну смысл ясен должен быть


 
NewD   (2004-01-08 12:05) [3]

во первых какая СУБД ?
если напрмер Аксесс то так

SELECT people.rowid, people.name, people.d_sv
FROM people
WHERE day(people.d_sv) between 8 and 14
AND month(people.d_sv) =1

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


 
paul_k   (2004-01-08 12:24) [4]

да.. а можно проще
where people.d_sv>="01.08.2004"
and people.d_sv <dateadd(dd,1,"14.08.2004")

почему dateadd()используется?
да потому что "14.08.2004" это 0 часов 0 минут 0 секунд 14 января
следовательно если где-то дата сохранена со времененм то по условию <="14.08.2004" она не попадет в интервал, но ввсе что меньше ноля часов 15-го и есть четырнадцатое число


 
Layner   (2004-01-08 13:09) [5]

Спасибо за помощь
NewD, AND month(people.d_sv) =1, а если с 25 января по 5 февраля?
DCoder, это наверное, то что надо, сейчас попробую.


 
Layner   (2004-01-08 13:12) [6]

Ошибся малось, DCoder, нужно определять без ГОДА!!!
Т.е. человек, хоть с 49г.р., хоть 86г.р. должен попасть в выборку, т.е. год можно сразу выбросить из выборки.
БД Access, забыл сказать.


 
Layner   (2004-01-08 13:21) [7]

Никто не подскажет, как получить кол-во дней с 1899г. (или какая там точка отсчета) из Access даты?


 
Danilka   (2004-01-08 13:37) [8]

[7] Layner © (08.01.04 13:21)
1. А как тебе это поможет с учетов вот-этого:

> [6] Layner © (08.01.04 13:12)
> Ошибся малось, DCoder, нужно определять без ГОДА!!!


2. Вычислять день от начала года тоже не есть правильно, т.к. 1 марта в високосный и невисокосный год будет разным.

А по теме ничего сказать не могу, т.к. с Аццесом не работаю. Хотя твой код, по-идее, должен работать. Хоть и кривой он. Если, конечно, ты в синтакисе аццесса не накосячил.


 
paul_k   (2004-01-08 13:40) [9]

DateDiff («interval»; «date1»; «date2»; «firstweekday»; «firstweek»)

DateDiff Function Example

The following examples use the DateDiff function to calculate the number of calendar weeks between the first of the year and today, and the number of days since February 1, 1995 respectively.

Debug.Print DateDiff("ww", "1-1", Now())
Debug.Print DateDiff("y", #1-Feb-1995#, Now())
The next example shows how to use the DateDiff function in a query expression. Suppose you have an Orders table that contains an OrderDate field and a ShippedDate field. You can create a calculated field in a query to display the time elapsed between an order date and a shipped date for each order. In the Query window, create a new query by adding the Orders table and dragging the OrderID field to the query design grid. In an empty Field cell, enter the following to create a calculated field.

DaysElapsed: DateDiff("y", [OrderDate], [ShippedDate])


 
paul_k   (2004-01-08 13:42) [10]

а по поводу "без года", да неправ.
вот Ne wD (08.01.04 12:05) [3] - абсолютно прав


 
Layner   (2004-01-08 13:57) [11]

А как прав, если данные только за январь, а если, повторюсь с 25 января по 5 февраля?
AND month(people.d_sv) =1 (1=январь)
За DateDiff спасибо, сейчас покумекаю :)


 
paul_k   (2004-01-08 14:04) [12]

хмм.. ну приводить все к одному году...причем к високосному.. как вариант
что нить типа
CDate(Cstr(day(people.d_sv))+"."+mons(people.d_sv)+".2000") и над хвостами периода так-же глумится..


 
Danilka   (2004-01-08 14:16) [13]

[12] paul_k © (08.01.04 14:04)
еще хуже. нафига сначала вытаскивать из даты месяц и день, а затем все опять преобразовывать в дату?

уж лучше тогда чуть подкряченый авторский код:

SELECT people.rowid, people.name, people.d_sv
FROM people
WHERE month(people.d_sv)*100+day(people.d_sv) BETWEEN 125 AND 205

по-идее, должен искать с 25 января по 5 февраля.


 
Reindeer Moss Eater   (2004-01-08 14:19) [14]

Select * From Peoples
Where
(Month(BDate) = Month(GetDate()) And Day(BDate) - Day(GetDate()) Between 0 and 3)
OR
(
Month(BDate) = Month(GetDate() + 3) And Day(BDate) <=Day(GetDate()+3) And Month(GetDate()+3) <> Month(GetDate())
)


 
NickBat   (2004-01-08 15:31) [15]

Что-то не дочитался в какой СУБД идет речь. Но, кажется, проще сделать вот так:
Например надо выбрать с 20.11 по 10.12
WHERE (extract(month from op_date)=11 and extract(day from op_date)>=20)
OR (extract(month from op_date)=12 and extract(day from op_date)<=10)


 
FoxBox   (2004-01-08 16:48) [16]

Народ, Вы еще помучайтесь с поиском по ключу "с 20 декабря по 15 января"


 
Князев Сергей   (2004-01-08 17:42) [17]

А вот DATEPART(mm, "You first Date") нету в Access


 
sniknik   (2004-01-08 18:25) [18]

добавить свои пять копеек, чтоли ;о))
SELECT rowid, name, d_sv FROM people
WHERE DateSerial(2000, Month(d_sv), Day(d_sv)) BETWEEN #01/25/2000# AND #02/05/2000#

насчет
> то "прокатывает", то показывает не верно.
это может быть изза того как даты в запросе вставлены (у меня тоже плохо), делай параметрами. зачем? выполни такой запрос
SELECT #12/13/2000#, #13/12/2000#
поймеш.


 
Layner   (2004-01-09 11:06) [19]

sniknik © (08.01.04 18:25)
Запрос классный, проверил только что, все отлично, запрос выбирает все записи, а то что не сработает на 15 декабря-15 января например, то тут можно UNION ALL, 2 запроса в 1 прогнать.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-2092
Марат
2004-01-19 14:37
2004.02.02
HotKey


3-2034
Patrick
2004-01-05 10:46
2004.02.02
Импорт в Oracle


4-2423
voe
2003-11-23 02:05
2004.02.02
Создания архиватора


14-2277
DenK_vrtz
2004-01-09 09:59
2004.02.02
Может это не скромно, но хочу поделиться своей радостью!


1-2199
DAnton
2004-01-16 07:46
2004.02.02
Дата+время=число





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский