SQL DataType - как хранить год?

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

7 ответов


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


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

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


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

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


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


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


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


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

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

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

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