SQL DataType - Как хранить год? - PullRequest
37 голосов
/ 30 марта 2009

Мне нужно вставить год (например, 1988, 1990 и т. Д.) В базу данных. Когда я использовал дату или дату и время Тип данных, это показывает ошибки. Какой тип данных я должен использовать.

Ответы [ 8 ]

32 голосов
/ 30 марта 2009

обычный 4-байтовый INT - это путь к большому, пустая трата пространства!

Вы не говорите, какую базу данных используете, поэтому я не могу рекомендовать конкретный тип данных. Все говорят «используйте целое число», но большинство баз данных хранят целые числа в 4 байта, что намного больше, чем вам нужно. Вам следует использовать двухбайтовое целое число (smallint на SQL Server), которое лучше сэкономит место.

28 голосов
/ 30 марта 2009

Если вам нужно сохранить год в базе данных, вам следует либо использовать тип данных Integer (если вы недействительны только для хранения года), либо тип данных DateTime (который предполагает сохранение даты, которая в основном равна 1 / 1/1990 00:00:00 в формате).

10 голосов
/ 23 марта 2010

Эй, вы можете использовать year () тип данных в MySQL Он доступен в двухзначном или четырехзначном формате.

Примечание: допустимые значения в четырехзначном формате: с 1901 по 2155. Допустимые значения в двухзначном формате: от 70 до 69, представляющие годы с 1970 по 2069

3 голосов
/ 07 февраля 2012

Сохранение «года» в MSSQL в идеале будет зависеть от того, что вы с ним делаете, и каков будет смысл этого «года» для вашего приложения и базы данных. При этом есть несколько вещей, чтобы заявить здесь. В MSSQL «DataType» для 2012 года не существует. Я бы предпочел использовать SMALLINT, так как это всего 2 байта (экономя 2 из 4 байтов, которые требует INT). Ваше ограничение заключается в том, что вы не можете иметь год старше 32767 (по состоянию на SQL Server 2008R2). Я действительно не думаю, что SQL станет базой данных через десять тысяч лет, не говоря уже о 32767. Вы можете рассматривать INT как функцию Year () в MSSQL, которая преобразует тип данных «DATE» в INT. Как я уже сказал, это зависит от того, где вы получаете данные и куда они идут, но SMALLINT должен быть в порядке. INT будет излишним ... если только у вас нет других причин, подобных той, о которой я упоминал выше, или если требования кода нужны в форме INT (например, интеграция с существующим приложением). Скорее всего SMALLINT должен быть в порядке.

1 голос
/ 30 марта 2009

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

1 голос
/ 30 марта 2009

Всего год, больше ничего? Почему бы не использовать простое число?

0 голосов
/ 08 апреля 2019

Я не думаю, что использование целого числа или любого его подтипа является хорошим выбором. Рано или поздно вам придется делать другую дату, например, операции с ней. Также в 2019 году не будем сильно беспокоиться о космосе. Посмотрите, что эти сэкономленные 2 байта стоили нам в 2000 году.

Я предлагаю использовать дату года + 0101, преобразованную в истинную дату. Точно так же, если вам нужно хранить месяц года, год магазина + месяц + 01 в качестве истинной даты.

Если вы сделали это, вы сможете правильно выполнить «материал для свиданий» на этом позже

0 голосов
/ 10 октября 2012

Хранение может быть только частью проблемы. Как это значение будет использоваться в запросе?

Будет ли оно сравниваться с другими типами данных даты и времени или все связанные строки также будут иметь числовые значения?

Как бы вы справились с изменением требований? Насколько легко вы могли бы отреагировать на запрос о замене года меньшим интервалом времени? то есть теперь они хотят, чтобы это было разбито на четверти?

Числовой тип может быть легко использован в запросе даты и времени, если имеется справочная таблица для соединения с такими вещами, как даты начала и окончания (от 1/1 / X до 12/31 / x) и т.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...