Как добавить время (годы) в столбец даты в таблице

Я работаю над базой данных Microsoft Access Northwind в Access 2007. В таблице Orders есть три поля даты: OrderDate, RequiredDate и ShippedDate.

Все эти месторождения в 1994-1996 гг. Я пытаюсь ввести это в систему ETL, но эта система не допускает дат старше 15 лет.

Я хотел бы добавить 10 лет к каждой из этих трех областей.

Я пытаюсь что-то вроде этого: UPDATE Orders set OrderDate = DateAdd("yyyy",10,OrderDate)

... но получаю сообщение об ошибке "Слишком мало параметров. Ожидается 1". Когда я вижу эту ошибку, обычно это опечатка в используемом имени столбца, но я нигде ее не вижу. Какие-либо предложения?


person Phoenix14830    schedule 18.02.2014    source источник
comment
Вы пробовали UPDATE Orders set OrderDate = DateAdd("yyyy",10,[OrderDate]) ...   -  person bhs    schedule 18.02.2014
comment
Спасибо @bhs. Я только что попробовал это, но все равно получаю ту же ошибку.   -  person Phoenix14830    schedule 18.02.2014
comment
Синтаксис подходит для того, что вы опубликовали, есть ли в вашем запросе что-то еще, что вы не опубликовали?   -  person GarethD    schedule 18.02.2014
comment
Попробуйте выполнить запрос UPDATE в конструкторе запросов Access. Когда вы запустите его, Access представит диалоговое окно ввода, в котором запрашивается значение параметра. Диалоговое окно включает имя того, что Access считает параметром. Как называется параметр?   -  person HansUp    schedule 18.02.2014
comment
Запрос UPDATE в вашем вопросе работает, если таблица называется Orders. Если таблица называется Order, вам понадобятся квадратные скобки [] вокруг нее, потому что ORDER является зарезервированным словом в SQL. @HansUp предложил хорошее предложение о том, как определить реальную проблему.   -  person Gord Thompson    schedule 18.02.2014


Ответы (3)


Проблема определенно не из-за синтаксической ошибки с DateAdd. Этот пример окна Immediate показывает, что ваш синтаксис DateAdd действителен.

? DateAdd("yyyy",10,Date())
2/18/2024 

И это будет работать одинаково в коде VBA или в запросе.

Учтите, что поле доступа может иметь свойства name и caption.

Свойства поля, отображающие имя и заголовок

Когда полю назначен заголовок, во многих случаях этот заголовок используется вместо имени поля. Одной из таких ситуаций является открытие таблицы непосредственно в режиме таблицы.

Таким образом, в вашей ситуации таблица может включать поле с заголовком "OrderDate", но фактическое имя поля другое. И в запросе вы должны использовать имя, потому что Access не распознает заголовок, предположит, что это должен быть параметр, и ожидает, что вы предоставите значение для параметра.

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

Вы можете избежать этой проблемы, создав запрос в конструкторе запросов Access. Запустите его как запрос SELECT и выберите одно из доступных имен полей. После того, как он будет правильно работать как SELECT, вы сможете преобразовать его в UPDATE, который вам действительно нужен.

Access предлагает удобные функции для рук. Иногда они добиваются своего и становятся раздражающими. Но это тот случай, когда полезные тенденции Access могут быть действительно полезными. :-)

Оказывается, у меня есть копия Northwind из Access 2007. По крайней мере, в моей копии поле называется «Дата заказа». Так что подпись не виновата. Просто закрепите имя поля, чтобы Access распознал его как «одно», а не два.

UPDATE Orders
SET [Order Date] = DateAdd("yyyy",10,[Order Date]);

Обратите внимание, что это еще один пример проблемы, которую может помочь вам избежать конструктор запросов.

person HansUp    schedule 18.02.2014

В итоге я перешел к созданию, а затем к дизайну запросов. Там на ленте теперь отображается «Дизайн» в виде вкладки. Я нажал «Обновить», а затем «Просмотр SQL» и вставил его, а затем переключился на режим «Дизайн». После сохранения запроса я попытался запустить его, но это не удалось из-за отключенной функции безопасности. Я включил его и обновил базу данных в порядке. Это закончилось тем, что сделал это:

UPDATE Orders SET RequiredDate = DateAdd("yyyy",10,RequiredDate);
UPDATE Orders SET OrderDate = DateAdd("yyyy",10,OrderDate);
UPDATE Orders SET ShippedDate = DateAdd("yyyy",10,ShippedDate);

Спасибо всем за вашу помощь.

person Phoenix14830    schedule 19.02.2014

Вместо DATEADD("yyyy", 10, OrderDate)

Сделайте это DATEADD (год, 10, OrderDate)

person JGow    schedule 18.02.2014
comment
Спасибо. Я пробовал это и все еще получаю слишком мало параметров. Ожидаемая 1. ошибка. Синтаксис DateAdd, который я использовал, был взят из: techonthenet.com/access/functions/date /dateadd.php - person Phoenix14830; 18.02.2014
comment
Хорошо, я думаю SQL. Тогда комментарий от bhs в вашем исходном сообщении должен работать. - person JGow; 18.02.2014