Есть ли способ определить формат данных в операторе MS Access SQL CREATE TABLE?

Я использую библиотеку DBI в R для установления соединения с базой данных MS Access (в этом примере называемой db), а затем использую функцию DBI dbGetQuery() для передачи SQL-запроса MS Access, показанного ниже. Если я запускаю этот сегмент кода примера, не пытаясь определить формат, он создает новую таблицу, как и ожидалось. Чего я не могу определить, так это того, можно ли определить формат для типа данных в одном запросе? Если возможно, каков синтаксис для определения формата в операторе CREATE TABLE.

Без попытки форматирования:

dbGetQuery(db, "CREATE TABLE MyTable
(
  Table_ID AutoIncrement PRIMARY KEY,
  Location CHAR NOT NULL,
  Event_Date DATE NOT NULL,
  Species_Code CHAR NOT NULL,
  Length DOUBLE,
  Weight DOUBLE,
  Sex CHAR
)")  

При попытке отформатировать дату возникает синтаксическая ошибка:

dbGetQuery(db, "CREATE TABLE MyTable
(
  Table_ID AutoIncrement PRIMARY KEY,
  Location CHAR NOT NULL,
  Event_Date DATE NOT NULL FORMAT \"yyyy/mm/dd\",
  Species_Code CHAR NOT NULL,
  Length DOUBLE,
  Weight DOUBLE,
  Sex CHAR
)")

person Lauren Hostert    schedule 16.02.2021    source источник
comment
Если вы имеете в виду свойство Format поля, для которого требуются VBA и DAO TableDefs stackoverflow.com/questions/56593003/. Не знаю, можно ли перевести в код r. Я редко устанавливаю формат в таблице. Я форматирую элементы управления в форме или отчете.   -  person June7    schedule 17.02.2021
comment
Вы можете форматировать после получения данных в R.   -  person Ronak Shah    schedule 17.02.2021
comment
Спасибо вам обоим. Я имею в виду свойство Format поля, но будучи новичком в Access DB, я не осознавал, что их нужно устанавливать с помощью VBA и DAO TableDefs. Я думал, что их можно будет установить при создании таблицы. Я посмотрю, можно ли это перевести на R, иначе то, что предложил @RonakShah (сохранение его как даты/времени и форматирование позже в R), будет тем, как я с этим справлюсь.   -  person Lauren Hostert    schedule 17.02.2021


Ответы (1)


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

Когда я хочу, чтобы поле имело специальное форматирование даты, я использую тип данных CHAR (или Short Text, на языке Access), затем я использую функцию FORMAT() для форматирования значений даты по своему вкусу всякий раз, когда я вставляю новую дату. Это дает большую гибкость с датами.

person DenimChicken    schedule 17.02.2021
comment
Дата, хранящаяся в текстовом поле, не является истинным значением даты, и вычисление даты не будет работать должным образом без преобразования. Почему бы не использовать поле даты/времени и не применить форматирование с помощью свойства Format к форме/отчету? Можно даже использовать функцию формата в поле даты/времени. Имейте в виду, что функция Format() возвращает строку. - person June7; 17.02.2021
comment
Это очень плохой совет. Всегда сохраняйте даты как Date, а не текст, не числа, без исключений. - person Gustav; 17.02.2021