Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по объединению полей и функциям Дата/время
 
 автор: alex3005   (29.12.2009 в 11:14)   личное сообщение
 
 

Здравствуйте, помогите пожалуйста разобраться.
У меня есть два столбца: 1 столбец - месяц (январь, февраль,...), 2 столбец - год (2007,2008,...)
Как мне выбрать из таблицы записи допустим с января 2007 по март 2008?
Я так понял нужно объединить эти столбцы и преобразовать в формат даты, например 01.01.2008 (пусть число всегда будет 1), но какую функцию использовать?
Объясните пожалуйста чайнику.

  Ответить  
 
 автор: FORMAT   (29.12.2009 в 11:47)   личное сообщение
 
 

Первый способ - наиболее правильный - выкинуть нафиг эти столбцы и хранить просто даты.
Затем выбирать по условию в запросе between.

Второй способ - корявый. С помощью split разбивать дату ( 01.01.2008 ) на составляющие. С помощью Enum определить все месяцы и присвоить им ( месяцам ) соответствующие числовые значения. И потом пытаться боком-раком выбирать соответствия из таблицы.
Но это ИМХО изврат.

  Ответить  
 
 автор: alex3005   (29.12.2009 в 11:56)   личное сообщение
 
 

Дело в том что не я создавал это творение, вы может меня не так поняли мне из этих двух полей нужно сделать одно поле, как бы попроще то, вообщем в одно столбце "июнь" допустим, во втором "2008" допустим, объединил я их и получил "июнь,2008", как мне этот "июнь,2008" превратить в "01.06.2008"
Спасибо что откликнулись

  Ответить  
 
 автор: Lukas   (29.12.2009 в 11:57)   личное сообщение
 
 

Третий вариант:
А почему-бы не собрать дату из полей таблицы Cdate-ом?
А далее Format-ом и Between-ом.

?Cdate("01 июня 2008")
01.06.2008 

  Ответить  
 
 автор: FORMAT   (29.12.2009 в 12:04)   личное сообщение
 
 

Как собрать два поля запросом в одно недавно спрашивала lurix. там есть вариант решения.

  Ответить  
 
 автор: alex3005   (29.12.2009 в 12:37)   личное сообщение
 
 

Вообще я в VB не силен, а можно как то сделать это в конструкторе?
поставил в конструкторе вот это :
Выражение1: CDate([Месяц] & " " & [Год])
Вроде получил то что нужно.
ОГРОМНОЕ СПАСИБО

  Ответить  
 
 автор: alex3005   (29.12.2009 в 13:55)   личное сообщение
 
 

Делаю запрос с параметрами по полученному столбцу:
>=[Начало периода] And <=[Конец периода] выдает непонятно что, например если я запрашиваю с 01.01.2007 по 01.01.2008, выдает только все записи с 01.01.2007 и все записи с 01.01.2008, а промежуточных нет (хотя по идее они есть), решил проверить - стал выбирать записи >01.01.2008 - он мне показываети 2007 год - не пойму в чем дело, может формат столбца получился не такой какой тогда? (все данные в полученном столбце имеют вид dd.mm.yyyy

  Ответить  
 
 автор: Lukas   (29.12.2009 в 14:02)   личное сообщение
 
 


автор: Lukas (29.12.2009 в 11:57)
...
А далее Format-ом и Between-ом.


Я не зря упомянул эти функцию и оператор.
Поищите на форуме как правильно форматировать значения даты для передачи в запросы и
пользуйте оператор Between для проверки вхождения значения в диапазон.

  Ответить  
 
 автор: alex3005   (29.12.2009 в 14:16)   личное сообщение
 
 

Значит это не прокатит :Выражение1: CDate([Месяц] & " " & [Год]), получилось то вроде то что нужно - специально записи смотрел, нужный формат: dd.mm.yyyy, не пойму только почему неправильно выбирает, раньше когда в таблице сам задавал формат даты - в таблице правильно все выбиралось, что же щас делать, можно ли как то отформатировать полученную дату пользуясь конструктором?

  Ответить  
 
 автор: Lukas   (29.12.2009 в 14:34)   личное сообщение
 
 


SELECT t1.*
FROM t1
WHERE CDate("01 " & t1.ItMonth & " " & t1.ItYear) Between #1/1/2010# And #03/31/2010#;

Здесь даты начала и окончания интервала приведены в формате, понятном запросу.

  Ответить  
 
 автор: alex3005   (29.12.2009 в 15:06)   личное сообщение
 
 

Извините полного чайника, но куда это привентить, я все делаю в конструкторе, я понимаю что t1 - таблица ItMonth и ItYear - это имена полей, но куда это
SELECT t1.*
FROM t1
WHERE CDate("01 " & t1.ItMonth & " " & t1.ItYear) Between #1/1/2010# And #03/31/2010#;
вставить, это я так понимаю надо где то макрос открывать...
Мне даже редактор VB не удается открыть - пишет Project is unviewable (программа делалась не мной - а выборку сделать надо...)

  Ответить  
 
 автор: Lukas   (29.12.2009 в 15:25)   личное сообщение
17 Кб.
 
 

Переключить вид запроса в режим SQL.
Но можно и в режиме конструктора:

  Ответить  
 
 автор: alex3005   (29.12.2009 в 15:27)   личное сообщение
 
 

А как в режиме конструктора?
А t1 у Вас это новое поле ( в котором будет искомая дата)?
Пишет обнаружены символы за пределами инструкции SQL

  Ответить  
 
 автор: Lukas   (29.12.2009 в 15:31)   личное сообщение
 
 

Да как на рисунке в прицепе предыдущего сообщения.
t1- это имя таблицы, где данные живут.

  Ответить  
 
 автор: alex3005   (29.12.2009 в 15:39)   личное сообщение
 
 

В запросе сделал вот так:
Between CDate([Начало периода]) And CDate([Конец периода])
Все работает, СПАСИБО

  Ответить  
 
 автор: Lukas   (29.12.2009 в 15:43)   личное сообщение
20 Кб.
 
 

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

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList