SELECT id, Record_date_Sub FROM
(SELECT id, Trim(Left(Record_date, 10)) as Record_date_Sub FROM JournalEvents)
WHERE Record_date_Sub BETWEEN DateValue('01.05.2007') AND DateValue('07.06.2007')
Получить часть строки в Access
Помогите, пожалуйста, решить проблему.
Работаю с БД Access. Есть поле типа дата время. Данные хранятся в ввиде [dd.mm.yyyy hh:mm:ss].
Нужно получить результат dd.mm.yyyy, т.е. первые 10 симоволов. Есть ли у ацесса встроенные функции для работы со строками?
Однако предполагаю, что MSSQL Server имеет другую функцию для решения подобных задач. Кажется есть функция convert.
А нет ли универсальной функции для MSSQL Server и Access, которая решает ту же задачу? Или же Left работает и на "сервере"?
Мне скоро придется конвертировать бд и хотелось бы править как можно меньше запросов...
Код выдает неверные результаты. В чем может быть дело?
Код:
Наверное, подзапрос возвращает Record_date_Sub как строку?
Цитата: dominator
Есть поле типа дата время. Данные хранятся в ввиде [dd.mm.yyyy hh:mm:ss].
Если поле имеет тип данных Date/Time, то данные в этом поле хранятся [COLOR=blue]не[/COLOR] в виде строки.
Цитата: dominator
Нужно получить результат dd.mm.yyyy, т.е. первые 10 симоволов. Есть ли у ацесса встроенные функции для работы со строками?
Функция Format вернет строку в том формате, который указан вторым параметром:
Код:
Format(dDate, "dd.mm.yyyy")
Цитата: Host
Если поле имеет тип данных Date/Time, то данные в этом поле хранятся [COLOR=blue]не[/COLOR] в виде строки.
Ну, это понятно:) Я имел ввиду непосредственно поле подзапроса после обработки его указанными функциями.
Цитата: Host
Функция Format вернет строку в том формате, который указан вторым параметром:
Код:
Format(dDate, "dd.mm.yyyy")
Спасибо. Подставил вместо своих манипуляций.
Я сделал так:
Код:
SELECT id, Record_date FROM JournalEvents
WHERE Format(Record_date, "dd.mm.yyyy") BETWEEN DateValue('01.05.2007') AND DateValue('07.06.2007');
WHERE Format(Record_date, "dd.mm.yyyy") BETWEEN DateValue('01.05.2007') AND DateValue('07.06.2007');
В результате, получаю данные с 01.06.2007 по 07.06.2007...
Данные мая игнорируются.
Меняю даты:
Код:
BETWEEN DateValue('01.05.2007') AND DateValue('27.05.2007')
Захватываются записи и июня тоже.
Т.е. объективно работает неверно. Как это сделать правильно?
Цитата: dominator
Т.е. объективно работает неверно. Как это сделать правильно?
Access ожидает от тебя строку SQL запроса, а не исполняемый код. Ты должен сформировать строку так, что бы ее понял Access:
Код:
SELECT JournalEvents.id, JournalEvents.Record_date, JournalEvents.Comment
FROM JournalEvents
WHERE JournalEvents.Record_date BETWEEN #05/01/2007# AND #05/27/2007#;
FROM JournalEvents
WHERE JournalEvents.Record_date BETWEEN #05/01/2007# AND #05/27/2007#;
А все функции должны быть за пределами строки. Их Access не понимает.
Спасибо тебе большое. Все получилось так, как надо.