web-dev-qa-db-fra.com

Type de données SQL - Comment stocker une année?

Je dois insérer une année (par exemple: 1988, 1990, etc.) dans une base de données. Lorsque j'ai utilisé le type Date ou Date/Datedata, cela indique des erreurs. Quel type de données devrais-je utiliser? 

36
peter

Si vous devez stocker une année dans la base de données, vous voudrez peut-être utiliser un type de données Integer (si vous ne définissez que le stockage de l'année) ou un type de données DateTime (ce qui implique de stocker une date qui est fondamentalement 1/1/1990 00:00:00 en format).

28
TheTXI

Un INT régulier de 4 octets est trop gros, c'est un gaspillage d'espace!  

Vous ne dites pas quelle base de données vous utilisez, je ne peux donc pas vous recommander un type de données spécifique. Tout le monde dit "utiliser un entier", mais la plupart des bases de données stockent des entiers sur 4 octets, ce qui est bien plus que nécessaire. Vous devez utiliser un entier sur deux octets (smallint sur SQL Server), qui permettra de mieux économiser de l'espace.

31
KM.

Hé, vous pouvez utiliser year () datatype dans MySQLIl est disponible en format à deux ou quatre chiffres.

Remarque: Valeurs autorisées en format à quatre chiffres: 1901 à 2155. Valeurs autorisées en format à deux chiffres: 70 à 69, représentant les années 1970 à 2069.

9
user786900

Stocker une "année" dans MSSQL dépendra idéalement de l'utilisation que vous en ferez et de la signification de cette "année" pour votre application et votre base de données. Cela étant dit, il y a quelques choses à dire ici. Il n'y a pas de "DataType" pour l'année à compter de 2012 dans MSSQL. Je préférerais utiliser SMALLINT car il ne s'agit que de 2 octets (ce qui vous évite de perdre 2 des 4 octets demandés par INT). Votre limite est que vous ne pouvez pas avoir une année antérieure à 32767 (à partir de SQL Server 2008R2). Je ne pense vraiment pas que SQL sera la base de données de choix dans dix mille ans, encore moins 32767. Vous pouvez considérer INT comme la fonction Year () de MSSQL convertissant le type de données "DATE" en un INT. Comme je l'ai dit, tout dépend de l'endroit où vous obtenez les données et de leur destination, mais SMALLINT devrait aller très bien. INT serait excessif ... sauf si vous avez d'autres raisons que celle que j'ai mentionnée ci-dessus ou si les exigences du code en ont besoin sous forme INT (par exemple, l'intégration à une application existante). SMALLINT devrait très bien aller très bien.

3
Qubits

Juste un an, rien d’autre? Pourquoi ne pas utiliser un entier simple? 

1
Frederik Gheysels

Utilisez un entier si tout ce que vous avez besoin de stocker est l'année. Vous pouvez également utiliser datetime si vous pensez qu'il y aura des calculs basés sur la date lors de l'interrogation de cette colonne.

1
Ender

Le stockage peut n'être qu'une partie du problème. Comment cette valeur sera-t-elle utilisée dans une requête? 

Est-ce que cela va être comparé avec d'autres types de données date-heure ou est-ce que toutes les lignes associées auront aussi des valeurs numériques?

Comment traiteriez-vous une modification des exigences? Avec quelle facilité pourriez-vous réagir à une demande de remplacement de l’année par une tranche de temps plus petite? c’est-à-dire qu’ils veulent maintenant une ventilation par trimestre?

Un type numérique peut être facilement utilisé dans une requête date/heure en ayant une table de correspondance à joindre contenant des éléments comme les dates de début et de fin (1/1/X à 12/31/x), etc.

0
Rawheiser